mingw问题分析和解决

c
chebyshev
楼主 (未名空间)

前文说过。我有个c程序。各种linux都没问题。mac os也没问题。
mingw gcc defaul设置build没问题。但是极其慢。

【1】
我机器上有个cygwin,default用的是Mingw gcc。
但是cygcheck可以用。查出来,其连接的除了一些windows开头的dll。
c run time是MSVCRT.DLL。会不会是此dll已经不再维护的原因?我查了下:
https://devblogs.microsoft.com/oldnewthing/20140411-00/?p=1273
说:

At some point, the decision was made to just give up and declare it an
operating system DLL, to be used only by operating system components. All
newer versions of Visual C/C++ used specifically-numbered DLLs for their
runtime libraries. (Giving different names to each version of the run-time
library solves the problem of trying to make one DLL service multiple
versions of clients, as well as addressing the accidental downgrade problem.)

Although MSVCRT.DLL has been an operating system DLL for a long time, and
has been documented as off-limits to applications, there are still a lot of people who treat it as a C runtime delivery channel, and those programs
create a lot of grief for the product team.

简而言之此dll是vc 4年代的。后面麻烦太多,都改成加版本号的msvcrtxxx.dll了。

【2】
然后我manage从另一个方向验证下是NSVCRT.DLL的问题。
把cygwin自己的gcc装上。去掉MINGW的path。重新build。
cygcheck,链接的是cygwin1.dll。
然后运行就没问题了。比linux慢,但是不明显。

所以结论是:
1.MSVCRT.DLL不宜用于Applications。(according to Raymond Chen)。
2.MINGW gcc default还是用的这个DLL。
3.用MINGW gcc之风险 约等于: 用vc 4写的c程序在windows 10跑。

 

🔥 最新回帖

c
chebyshev
102 楼

另外你前面说一行搞定。(不考虑可持续性)这完全是有可能的。

就这点破事,bash熟悉的,查出来哪里有冲突,然后走别的路径link,或者直接加
ifdefine,等等等等,写一个长行解决掉,完全可能。

所以我之前说不完全排除你技艺高超,一行搞定的可能。毕竟在过去,bash一行干啥的都有。然而要我搞,确实要一星期。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 一个人在做事情的时候会收到各种input, 1 2 3 4 5,问题是先看到1就觉得1是对的
: ,这个是本能但是不是对的做法。这个写post的dude可能是我,那你是不是也听了?: Regardless技术问题(我觉得没啥好争的),折腾系统问题大忌就是自己练基本的都没
: 试过,就根据网上的帖子做决定。
: anyway,我话说完了,自己看着办。。
: ~~~~~~~~~~~~~~~~~~~~~~~~
: 那如果你atoi64 cygwin不work呢?你打算再去search一圈找个cygwin2?假设你能找到
: ,如果cygwin2的sprintf又不对呢?

c
chebyshev
101 楼

我看到有.a文件冲突这件事。查一下此事属实,当然就听啊。这跟谁写的有啥关系。
你不知道此事,所以认为我是小白用户。我并不介意的。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 一个人在做事情的时候会收到各种input, 1 2 3 4 5,问题是先看到1就觉得1是对的
: ,这个是本能但是不是对的做法。这个写post的dude可能是我,那你是不是也听了?: Regardless技术问题(我觉得没啥好争的),折腾系统问题大忌就是自己练基本的都没
: 试过,就根据网上的帖子做决定。
: anyway,我话说完了,自己看着办。。
: ~~~~~~~~~~~~~~~~~~~~~~~~
: 那如果你atoi64 cygwin不work呢?你打算再去search一圈找个cygwin2?假设你能找到
: ,如果cygwin2的sprintf又不对呢?

n
netghost
100 楼

一个人在做事情的时候会收到各种input, 1 2 3 4 5,问题是先看到1就觉得1是对的
,这个是本能但是不是对的做法。这个写post的dude可能是我,那你是不是也听了?

Regardless技术问题(我觉得没啥好争的),折腾系统问题大忌就是自己练基本的都没试过,就根据网上的帖子做决定。

anyway,我话说完了,自己看着办。。

【 在 chebyshev (......) 的大作中提到: 】
: 我压根就没改到msvcrt80或者别的版本。你听不懂么?
: 为啥我要在Mingw制造改库的问题,然后再自己解决问题。
: 你愿意改库,然后有问题自己修,那是你的事。
: 看一眼user forum。就知道这条路在我这里走不通。
: 就算我一行改库,通过了。
: 照样不能用。今天我的程序不用atoi64,这冲突没碰上。
: 那么我明天改程序之后呢?
~~~~~~~~~~~~~~~~~~~~~~~~
那如果你atoi64 cygwin不work呢?你打算再去search一圈找个cygwin2?假设你能找到,如果cygwin2的sprintf又不对呢?
: 同样的资料,你觉得能行,那随便你。
: 这取决于你的risk的认定。

c
chebyshev
99 楼

我压根就没改到msvcrt80或者别的版本。你听不懂么?
为啥我要在Mingw制造改库的问题,然后再自己解决问题。

你愿意改库,然后有问题自己修,那是你的事。

看一眼user forum。就知道这条路在我这里走不通。
就算我一行改库,通过了。

照样不能用。今天我的程序不用atoi64,这冲突没碰上。
那么我明天改程序之后呢?

同样的资料,你觉得能行,那随便你。
这取决于你的risk的认定。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 别去找别人的例子,就是你的,你的问题在哪里?这个非常简单。
: 你贴的东西,exactly说明一件事,你并没有看懂别人在说什么,虽然你search了一大
: 堆。要解决这件事,你只能踏踏实实的一步步自己搞明白。
: 你别和我急,这不是我的问题是你的问题,你不想解决就算了。

n
netghost
98 楼

别去找别人的例子,就是你的,你的问题在哪里?这个非常简单。

你贴的东西,exactly说明一件事,你并没有看懂别人在说什么,虽然你search了一大
堆。要解决这件事,你只能踏踏实实的一步步自己搞明白。

你别和我急,这不是我的问题是你的问题,你不想解决就算了。

【 在 chebyshev (......) 的大作中提到: 】
: 这问题不是关于我此刻这3000行能不能Mingw一行搞好。难道我后头就不改此程序了?
: 这是
: 根据现有信息,关于这个办法的判断---会不会troublesome,以及解决这问题要花的时
: 间,risk。
: 也许我的程序改了一遍过呢。那又如何。只要这个逻辑存在,那就是risk。
: 我给你具体看一个例子。此类debug过程Mingw用户论坛多的是。
: Step 1:
: 下面这段,作者说__findfirst有问题(他用别的办法修的)。
: http://lua-users.org/wiki/BuildingModules
: Using MinGW to build against LuaBinaries
: ...................

 

🛋️ 沙发板凳

w
wdong

你这么推理很不可靠,因为可能只是你那个版本的mingw慢,后面解决了。
还不如用vtune profile一下你那个程序看究竟是慢在了哪一步。

我搜出来两个东西
https://stackoverflow.com/questions/29954038/why-is-msvcrt-very-very-slowhttps://social.msdn.microsoft.com/Forums/vstudio/en-US/c072fe1a-47d7-4d42-
b91f-6f957f3f7fca/too-much-time-spent-in-rtlcomparememoryulong-from-
rtlallocateheap?forum=windowsgeneraldevelopmentissues

一个合理的怀疑是,somehow你和那个提问的人用mingw编译的时候
enable了DEBUG HEAP。

【 在 chebyshev (......) 的大作中提到: 】
: 前文说过。我有个c程序。各种linux都没问题。mac os也没问题。
: mingw gcc defaul设置build没问题。但是极其慢。
: 【1】
: 我机器上有个cygwin,default用的是Mingw gcc。
: 但是cygcheck可以用。查出来,其连接的除了一些windows开头的dll。
: c run time是MSVCRT.DLL。会不会是此dll已经不再维护的原因?我查了下:
: https://devblogs.microsoft.com/oldnewthing/20140411-00/?p=1273
: 说:
: At some point, the decision was made to just give up and declare it an
: operating system DLL, to be used only by operating system components. All : ...................

c
chebyshev

root cause确实可能有很多种。不过不管什么原因。按照微软的指引,msvcr.dll确实
不能用于应用程序。那么,除了改成cygwin1.dll,只能用带各种版本号的msvcrxxx.dll,
然而后者可能更麻烦。

我用gprofile分析过,用时最多的是取csv文件行列的一个自己写的函数。基本上是
fgets写的。

另外我去掉所有的flag比较过,就
linux: gcc main.c -lm
windows: gcc main.c
【 在 wdong (万事休) 的大作中提到: 】
: 你这么推理很不可靠,因为可能只是你那个版本的mingw慢,后面解决了。
: 还不如用vtune profile一下你那个程序看究竟是慢在了哪一步。
: 我搜出来两个东西
: https://stackoverflow.com/questions/29954038/why-is-msvcrt-very-very-slow
: https://social.msdn.microsoft.com/Forums/vstudio/en-US/c072fe1a-47d7-4d42-: b91f-6f957f3f7fca/too-much-time-spent-in-rtlcomparememoryulong-from-
: rtlallocateheap?forum=windowsgeneraldevelopmentissues
: 一个合理的怀疑是,somehow你和那个提问的人用mingw编译的时候
: enable了DEBUG HEAP。

n
netghost

mingw和cygwin是兩個不同的項目。
你要用mingw就老老實實從官網下一個。cygwin那個自帶的沒什麼人會care性能。

BTW,讀csv不要用fgets,用read一次性讀進來之後自己打斷。

【 在 chebyshev (......) 的大作中提到: 】
: root cause确实可能有很多种。不过不管什么原因。按照微软的指引,msvcr.dll确实
: 不能用于应用程序。那么,除了改成cygwin1.dll,只能用带各种版本号的msvcrxxx.
dll,
: 然而后者可能更麻烦。
: 我用gprofile分析过,用时最多的是取csv文件行列的一个自己写的函数。基本上是
: fgets写的。
: 另外我去掉所有的flag比较过,就
: linux: gcc main.c -lm
: windows: gcc main.c

g
guvest

我的Mingw是官网下的啊。MingW文档说要么用msvcrt,要么用更旧的crtdll。

msvcrt vs crtdll?
Mingw requires the Microsoft runtime libraries. You'll need either crtdll.
dll or msvcrt.dll on a system in order to run a program. There are two
distributions of mingw, one for each runtime library option. Use the version of mingw for the type of runtime library you wish to work with. Which is
better? That depends on what you need. Crtdll is on all Win32 systems, but
is no longer updated. It is available on platforms such as Windows 3.11/
Windows NT 3.5 and platforms that use Win32s. Msvcrt is not guaranteed to be on every Windows operating system, but it is more up-to-date and may offer more features. It handles threading better than crtdll and supplies
functions such as _i64toa and _atoi64 that crtdll doesn't. There is a
possibility that crtdll may not be supported in future releases of mingw.

msvcrt.dll微软之文档说不可用于应用。此属于private os
专用的dll。这个risk更肯定是存在的。别的资料也有指出此问题。(我这边root cause是不是
这问题,另说)。

另外说下我的测试环境,可以参考。
我的Cygwin 是TortoiseGit自带的。以前没注意,用起来还挺方便。之前默认用的是
MingW bin里的gcc。路径改过,加装CygWin自己的gcc之后,用不同的path,就可以用
不同的gcc去 build。

Wdong给的第一个link的讨论里,作者在下面的回复给了代码,我试了下。其问题没有
复现出来。可能是Mingw或者msvcrt修好了malloc的问题。第二个link建议改环境变量
。怕弄坏别的东西,还没试。
【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: mingw和cygwin是兩個不同的項目。

: 你要用mingw就老老實實從官網下一個。cygwin那個自帶的沒什麼人會
care性能。

: BTW,讀csv不要用fgets,用read一次性讀進來之後自己打斷。

: dll,

n
netghost

mingw只是編譯器的port,又不負責runtime C lib的實現,所以你想說什麼?

Visual Studio是個IDE,即是編譯器,又是編輯器,還帶一堆的lib(包括C lib,
windows和linux不一樣裝上的系統裏面是by default是沒有C lib的),還是調試器,
文檔,。。。。你想拿整個這麼一堆東西去比一個編譯器的port?這個不make sense吧?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我的Mingw是官网下的啊。MingW文档说要么用msvcrt,要么用更旧的crtdll。
: msvcrt vs crtdll?
: Mingw requires the Microsoft runtime libraries. You'll need either crtdll.: dll or msvcrt.dll on a system in order to run a program. There are two
: distributions of mingw, one for each runtime library option. Use the
version
: of mingw for the type of runtime library you wish to work with. Which is : better? That depends on what you need. Crtdll is on all Win32 systems, but
: is no longer updated. It is available on platforms such as Windows 3.11/
: Windows NT 3.5 and platforms that use Win32s. Msvcrt is not guaranteed to be
: on every Windows operating system, but it is more up-to-date and may
offer
: ...................

c
chebyshev

结论很简单:不要用mingw下载下来bin里面的gcc。
(尽管很多人,很多项目都在用)。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: mingw只是編譯器的port,又不負責runtime C lib的實現,所以你想說什麼?
: Visual Studio是個IDE,即是編譯器,又是編輯器,還帶一堆的lib(包括C lib,
: windows和linux不一樣裝上的系統裏面是by default是沒有C lib的),還是調試器,
: 文檔,。。。。你想拿整個這麼一堆東西去比一個編譯器的port?這個不make sense吧?
: version
: be
: offer

i
irch

首先mingw的gcc toolchain和标准库编译出来的是windows native用msvcrt,cygwin编译的是linux仿真用cygwin1.dll。所以你用的是mingw,跟cygwin没关系。

没有版本号的msvcrt是Windows系统内部用的。不同的Windows版本有不同的接口。
vcredist里带的vc动态链接库是标准接口,应用程序直接链接不用考虑具体操作系统。

如果应用程序是GPL许可证就不能链接proprietary许可的vcredist。GPL有操作系统内
建库的exception,所以msvcrt可以。mingw可能是出于这个原因不用vcredist。

n
netghost

恩,對你目前的狀態來說,你的結論對你注意是對你是對的。

但是我可以明確告訴你這個說法從一般意義來說是錯的,尤其是後一般cygwin1.dll的
結論。

並且我已經almost知道你的問題在哪裏了,但是這種事情演化成了技術討論99%的情況
下最後就是打架最後毫無結果,所以還是算了。
【 在 chebyshev (......) 的大作中提到: 】
: 标 题: Re: mingw问题分析和解决
: 发信站: BBS 未名空间站 (Sun Mar 21 16:03:51 2021, 美东)
:
: 结论很简单:不要用mingw下载下来bin里面的gcc。
: (尽管很多人,很多项目都在用)。
: 【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: : mingw只是編譯器的port,又不負責runtime C lib的實現,所以你想說什麼?
: : Visual Studio是個IDE,即是編譯器,又是編輯器,還帶一堆的lib(包括C lib,: : windows和linux不一樣裝上的系統裏面是by default是沒有C lib的),還是調試
器,
: : 文檔,。。。。你想拿整個這麼一堆東西去比一個編譯器的port?這個不make
sense
: 吧?
: : version
: : be
: : offer
:
:
:
:
:
:
: --
c
chebyshev

Mingw里msvcrdll的用法是不符合MSFT文档的。这点没啥可疑的。但是没仔细看过确实
不知道。
我以前也用过不少MINGW。(尽管不是release,一般windows版本都是给看demo用)
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 恩,對你目前的狀態來說,你的結論對你注意是對你是對的。
: 但是我可以明確告訴你這個說法從一般意義來說是錯的,尤其是後一般cygwin1.dll的
: 結論。
: 並且我已經almost知道你的問題在哪裏了,但是這種事情演化成了技術討論99%的情況
: 下最後就是打架最後毫無結果,所以還是算了。
: 器,
: sense

c
chebyshev

【1】
在cygwin里面可以:
c:/mingw/bin/gcc --version

你试一下看行不。
如果能打印出来版本号,就能在cygwin里面用mingw的gcc了。
然后能用cygcheck。可打印出来其用的dll。我现在是可以的。
直接gcc --version打印出来的则是cygwin自带的gcc的版本。
我这样做是为了同等比较。因为还有其他的一些dll。

【2】
其实文档上面有讲mingw用的是msvcrt.dll。
我这样做是为了确认下。而且可以同等对比。
msvcrt.dll的政策MSFT文档有。总之二者之冲突没啥疑问。

【3】
问题是Mingw无法用不同版本号的msvcrtxxx.dll,
因为你得其它的库都弄成一样的版本号,重新自己build。这个不太可持续。
所以基本上可以说Mingw是没啥保障的项目。
【4】
所以我今后不会用Mingw了。因为它可能随时就废了。
本质上它和你用vc4写程序,在window10跑类似。

【5】
cygwin1.dll之基础是这个red hat项目:https://sourceware.org/newlib/
【 在 irch (--) 的大作中提到: 】
: 首先mingw的gcc toolchain和标准库编译出来的是windows native用msvcrt,cygwin编
: 译的是linux仿真用cygwin1.dll。所以你用的是mingw,跟cygwin没关系。
: 没有版本号的msvcrt是Windows系统内部用的。不同的Windows版本有不同的接口。
: vcredist里带的vc动态链接库是标准接口,应用程序直接链接不用考虑具体操作系统。
: 如果应用程序是GPL许可证就不能链接proprietary许可的vcredist。GPL有操作系统内
: 建库的exception,所以msvcrt可以。mingw可能是出于这个原因不用vcredist。

n
netghost

如果你是care MSFT給一個tool認證的人,你爲什麼要去用Mingw?

再說一次,MingW負責不了用哪個msvcrt,你愛用哪個用哪個。別人爲了給你省事給了
一個在每個windows都能用的,你還想怎樣?
【 在 chebyshev (......) 的大作中提到: 】
: Mingw里msvcrdll的用法是不符合MSFT文档的。这点没啥可疑的。但是没仔细看过确实
: 不知道。
: 我以前也用过不少MINGW。(尽管不是release,一般windows版本都是给看demo用)

n
netghost

這件事,其實說白了,就是mingw沒有讓google把最新的項目出現再首頁的問題。問題
是別人不收錢的項目,爲啥要操心你搜索連pagedown都不願意看的問題?

不過你不會真的還在用最老的那個mingw吧?M$FT的VS,就算你給錢,過幾年不也的裝
一次是不?

【 在 chebyshev (......) 的大作中提到: 】
: 【1】
: 在cygwin里面可以:
: c:/mingw/bin/gcc --version
: 你试一下看行不。
: 如果能打印出来版本号,就能在cygwin里面用mingw的gcc了。
: 然后能用cygcheck。可打印出来其用的dll。我现在是可以的。
: 直接gcc --version打印出来的则是cygwin自带的gcc的版本。
: 我这样做是为了同等比较。因为还有其他的一些dll。
: 【2】
: 其实文档上面有讲mingw用的是msvcrt.dll。
: ...................

c
chebyshev

Mingw最新的也一样。没法换掉msvcrt。因为Mingw还有不少别的库呢。你要换至少理论上得重新用一致的msvcrtxxx.dll build一遍。这是技术面。

我当然没有blame Mingw的意思。人家文档说的很清楚,就是用的msvcrt.dll。
那显然risk就和早期的vc 4/5/6程序在今天的windows 10跑是一回事。risk自负嘛。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 如果你是care MSFT給一個tool認證的人,你爲什麼要去用Mingw?
: 再說一次,MingW負責不了用哪個msvcrt,你愛用哪個用哪個。別人爲了給你省事給了
: 一個在每個windows都能用的,你還想怎樣?

n
netghost

你用了最新的嗎?

你想解決你的問題?還是你只是想win this argument?
【 在 chebyshev (......) 的大作中提到: 】
: Mingw最新的也一样。没法换掉msvcrt。因为Mingw还有不少别的库呢。你要换至少理论
: 上得重新用一致的msvcrtxxx.dll build一遍。这是技术面。
: 我当然没有blame Mingw的意思。人家文档说的很清楚,就是用的msvcrt.dll。
: 那显然risk就和早期的vc 4/5/6程序在今天的windows 10跑是一回事。risk自负嘛。

c
chebyshev

我用了最新的Mingw, mingw64,以及旧的别的东西的toolchain带的旧Mingw都测过了。
还有个以前用的TDM-GCC也测过了。
我的问题用cygwin1.dll已经解决了。windows版本的软件只要开会的时候,
demo能跑出来结果就行。最多就是给客户laptop试一下。老板们,saleman都是Windows的
laptop。就这个作用。

公司有visual studio,不过我没装。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你用了最新的嗎?
: 你想解決你的問題?還是你只是想win this argument?

n
netghost

好吧所以你也沒裝過VS,只是你"覺得"而已。

我說了,你肯定覺得那樣就是對的,which is“對的”for you。但是告訴別人care
performance應該去用cygwin是非常坑爹的行爲。

實際上,我很懷疑你的問題是CRT的問題,因爲你居然用cygwin都不嫌慢的。Most
likely是你掉什麼坑里去了。

【 在 chebyshev (......) 的大作中提到: 】
: 我用了最新的Mingw, mingw64,以及旧的别的东西的toolchain带的旧Mingw都测过了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因爲你裝了這種東西就指望gcc a.c立刻解決問題,這種心態沒法用mingw這種東西的,因爲it的目的就不是讓你一站式搞定這種事情,另外一個角度來說能讓你一站式搞定的東西,也會沒有mingw這種工具的優越性。
: 还有个以前用的TDM-GCC也测过了。
: 我的问题用cygwin1.dll已经解决了。windows版本的软件只要开会的时候,
: demo能跑出来结果就行。最多就是给客户laptop试一下。老板们,saleman都是
Windows的
: laptop。就这个作用。
: 公司有visual studio,不过我没装。

c
chebyshev

我啥时候说care preformance要去用cygwin?更别说告诉别人用cygwin了。
我个人不会再用Mingw之第一理由是MSFT不让用msvcrt.dll。newlib起码有人维护。

具体哪个程序,cygwin慢不慢可以实际测试的。网上有程序跑一下不就知道了。之前那个stackoverflow问题就有。我这里测出来,比Mingw稍快,不明显。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 好吧所以你也沒裝過VS,只是你"覺得"而已。
: 我說了,你肯定覺得那樣就是對的,which is“對的”for you。但是告訴別人care : performance應該去用cygwin是非常坑爹的行爲。
: 實際上,我很懷疑你的問題是CRT的問題,因爲你居然用cygwin都不嫌慢的。Most
: likely是你掉什麼坑里去了。
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 因爲你裝了這種東西就指望gcc a.c立刻解決問題,這種心態沒法用mingw這種東西的,
: 因爲it的目的就不是讓你一站式搞定這種事情,另外一個角度來說能讓你一站式搞定的
: 東西,也會沒有mingw這種工具的優越性。
: Windows的

n
netghost

這不就結了?你自己想了一個理由,並沒有給出爲什麼。MSFT也沒讓你用cygwin1呢.不過你爲啥覺得MSFT不讓用msvcrt.dll?MS自己操作系統唯一幾乎可以肯定有的就是這
個東西,啥叫做不讓用?

【 在 chebyshev (......) 的大作中提到: 】
: 我啥时候说care preformance要去用cygwin?更别说告诉别人怎么怎么做了。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因爲你通篇都在說問題在於performance。
: 我个人不会再用Mingw之第一理由是MSFT不让用msvcrt.dll。newlib起码有人维护。

c
chebyshev

我说的是我自己这个程序的performance。不是别人的。
这是实际测试结果。网上也有别的程序可以测。
你把这问题over generalize了。
另外这问题网上有别人的参考代码,可以具体分析。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 這不就結了?你自己想了一個理由,which從來沒見到過。MSFT也沒讓你用cygwin1呢.
: 不過你爲啥覺得MSFT不讓用msvcrt.dll?MS自己操作系統唯一幾乎可以肯定有的就是這
: 個東西,啥叫做不讓用?
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 因爲你通篇都在說問題自語performance。

n
netghost

你自己的問題也沒代碼,除了你claim你有性能問題能說明啥?

但是爲了性能取用cygwin1,顯然是不對的。
同時因爲沒搞懂這個鏈接關係,不停地換環境也是沒有意義的。

你所有的問題,都歸結於你並不想去搞清楚這個過程是什麼。本身這不是問題 - 裝VS
好了,雖然那個搞法也有自己痛點,當然你既然沒試過我就不說什麼了。

【 在 chebyshev (......) 的大作中提到: 】
: 我说的是我自己这个程序的performance。不是别人的。
: 这是实际测试结果。网上也有别的程序可以测。
: 你把这问题over generalize了。
: 另外这问题网上有别人的参考代码,可以具体分析。

g
guvest

msvcr的问题,前面链接有代码可以测。其作者也说cygwin1.dll解决问题。我也覺得挺奇怪的。我找cygWin本意是看能不能跳过一条条看windows各种设置。与他不同。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你自己的問題也沒代碼,除了你claim你有性能問題能說明啥?
: 但是爲了性能取用cygwin1,顯然是不對的。
: 同時因爲沒搞懂這個鏈接關係,不停地換環境也是沒有意義的。
: 你所有的問題,都歸結於你並不想去搞清楚這個過程是什麼。本身這不是問題 - 裝
VS
: 好了,雖然那個搞法也有自己痛點,當然你既然沒試過我就不說什麼了。

n
netghost

這個的關鍵點,就在於crt不是編譯器的一部分,在windows下面也是不是OS的一部分。Windows下面的application如過用了crt,必須自己ship合適的lib,這件事情編譯器管不了,管不了,管不了,重要的事說三遍。

這件事你搞不懂,你就永遠只能各種軟件都裝一遍,各個論壇搜一邊地解決這種問題。

說道用哪個crt的問題,這事情要換crt就是一個命令行參數,你這麼扯一堆有意義嗎?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: msvcr的问题,前面链接有代码可以测。其作者也说cygwin1.dll解决问题。我也覺得挺
: 奇怪的。我找cygWin本意是看能不能跳过一条条看windows各种设置。与他不同。
: VS

g
guvest

理论上compiler和各种库包括crt是两回事。
但是现实上很多compiler是和各种库ship together或者tied的。
(这个办法的优缺点,我前面贴的一个链接最后有讨论。)
我以前用过别的公司的c tool chain,这情况很清楚。

你觉得一行命令行,Mingw带的gcc就能用别的msvccrtxxx 来build?那只是理论上。其文档不
支持这样做(可能是因为很多别的库有复杂依赖)。

我换Cygwin ,就是因为想 可靠的 换掉msvcrt而已。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: 這個的關鍵點,就在於crt不是編譯器的一部分,在windows下面也是不是OS的一
部分。
<br>: Windows下面的application如過用了crt,必須自己ship合適的lib,這件事情編
譯器管
<br>: 不了,管不了,管不了,重要的事說三遍。
<br>: 這件事你搞不懂,你就永遠只能各種軟件都裝一遍,各個論壇搜一邊地解決這種
問題。
<br>: 說道用哪個crt的問題,這事情要換crt就是一個命令行參數,你這麼扯一堆有意
義嗎?
<br>

d
didadida

有了wsl后

mingw意义何在?

【 在 chebyshev (......) 的大作中提到: 】
: 前文说过。我有个c程序。各种linux都没问题。mac os也没问题。
: mingw gcc defaul设置build没问题。但是极其慢。
: 我机器上有个cygwin,default用的是Mingw gcc。
: 但是cygcheck可以用。查出来,其连接的除了一些windows开头的dll。
: c run time是MSVCRT.DLL。会不会是此dll已经不再维护的原因?我查了下:
: https://devblogs.microsoft.com/oldnewthing/20140411-00/?p=1273
: 说:
: At some point, the decision was made to just give up and declare it an
: operating system DLL, to be used only by operating system components. All : newer versions of Visual C/C++ used specifically-numbered DLLs for their
: ...................

c
chebyshev

假设对方有一个不知道配置,不知道版本的windows。
你要把你的c程序(只用c标准库)在其上跑demo,那你会怎么做?
wsl未必人人都有吧?
【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 有了wsl后
: mingw意义何在?

n
netghost

問題是用MingW的point就是讓你decouple這些dependency。你既然不appreciate這件事就不用好了,但是不用說什麼performance的因素。

這個問題的關鍵點,在於我說了,你需要ship你自己的runtime dll,如果你還care任
何用戶的performance的話。所以不是改用msvcrt.dll, msvcrxxx.dll,還是cygwin1.
dll
的問題,而是能夠隨意選擇,並且知道怎麼ship的問題。要達到這個目標MingW並沒有
什麼問題,其實你如果知道問題在哪裏,cygwin也沒有什麼問題。(不過cygwin之所你還能用很大程度上是MingW的功勞)。

你今天用了cygwin1.dll解決了你現在的問題,過幾天發現這東西另外一個事情上面比
msvcrt.dll慢了10倍呢?你是不是又到處搜一邊,然後又抱怨再也不用cygwin1.dll了?

或者這麼說吧,如果一個人第一次的experience就是cygwin1.dll更慢,他是不是該立
刻認爲你是瞎扯蛋?

我認爲你的邏輯不自洽就是這個問題。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 理论上compiler和各种库包括crt是两回事。
: 但是现实上很多compiler是和各种库ship together或者tied的。
: (这个办法的优缺点,我前面贴的一个链接最后有讨论。)
: 我以前用过别的公司的c tool chain,这情况很清楚。
: 你觉得一行命令行,Mingw带的gcc就能用别的msvccrtxxx 来build?那只是理论上。其
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
對的,我這麼幹好久了。我什麼時候在這個站上這種事情是我自己沒做過隨便說的?
: 文档不: 支持这样做(可能是因为很多别的库有复杂依赖)。

: 我换Cygwin ,就是因为想 可靠的 换掉msvcrt而已。
: <br>: 這個的關鍵點,就在於crt不是編譯器的一部分,在windows下面也是不是
: OS的一
: ...................

n
netghost

WSL是個模擬器,如果你就是打算開發windows下面的native 程序,WSL對你沒什麼用。如果你這個native程序裏面還用了開源的庫,你幾乎肯定應該用MingW。
【 在 didadida (滴滴嗒嗒) 的大作中提到: 】
: 有了wsl后
: mingw意义何在?

g
guvest

风险总有高低。cygwin1.dll有人维护啊。msvcrt不出问题则已,出问题是逻辑上无解
的,因为微软不支持你这么用。所以Mingw 风险更高嘛。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: 問題是用MingW的point就是讓你decouple這些dependency。你既然不
appreciate
這件事
<br>: 就不用好了,但是不用說什麼performance的因素。
<br>: 這個問題的關鍵點,在於我說了,你需要ship你自己的runtime dll,如
果你還
care任
<br>: 何用戶的performance的話。所以不是改用msvcrt.dll, msvcrxxx.dll,還是
cygwin1.
<br>: dll
<br>: 的問題,而是能夠隨意選擇,並且知道怎麼ship的問題。要達到這個目標MingW
並沒有
<br>: 什麼問題,其實你如果知道問題在哪裏,cygwin也沒有什麼問題。(不過cygwin
之所你
<br>: 還能用很大程度上是MingW的功勞)。
<br>: 你今天用了cygwin1.dll解決了你現在的問題,過幾天發現這東西另外一
個事情
上面比
<br>: msvcrt.dll慢了10倍呢?你是不是又到處搜一邊,然後又抱怨再也不用
cygwin1.
dll了?
: ...................
<br>

g
guvest

我倒没用开源的库。问题是wsl装上,再要求salesman/customer去app store装相应的
Linux,这个过程麻烦,且不robust。关键是售前工作的对象不是工程师。装软件他们会出各种马工认为很愚蠢的问题。
这和售后是完全不同的。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: WSL是個模擬器,如果你就是打算開發windows下面的native 程序,WSL對你沒什
麼用。
<br>: 如果你這個native程序裏面還用了開源的庫,你幾乎肯定應該用MingW。
<br>

n
netghost

指定CRT是用mingw的基本技能,你不愿意学OK,到处download碰到一个能用的也行,但是把个人尝试得到的经验拿来当教条,这显然是错的。

还有,不要去说什么"微软不支持",微软支持cygwin了?你试过了somehow能用你还不是就涌上了,你真的管微软支持了?而且我发现你其实也没用过微软"支持的"VS,你知道2000年之后VS的C++程序从编译到分发的流程有多麻烦吗?还有你知道要用VS port一个开源的软件有多少事情要干?这里面每一件事都比你这个换lib的事麻烦10倍。

盲人摸象没问题,正常人把眼睛闭着去摸象这就有点好笑了。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 风险总有高低。cygwin1.dll有人维护啊。msvcrt不出问题则已,出问题是逻辑上无解
: 的,因为微软不支持你这么用。所以Mingw 风险更高嘛。
: <br>: 問題是用MingW的point就是讓你decouple這些dependency。你既然不
: appreciate
: 這件事
: <br>: 就不用好了,但是不用說什麼performance的因素。
: <br>: 這個問題的關鍵點,在於我說了,你需要ship你自己的runtime dll,如
: 果你還
: care任
: <br>: 何用戶的performance的話。所以不是改用msvcrt.dll, msvcrxxx.dll,還是
: ...................

n
netghost

WSL是典型的微软当年搅屎Netscape Javascript, Sun的Java一样的路数。主要目的就
是让一堆人先用着,然后慢慢地把WSL的experience和Linux搞得不一样。

看着这么一堆高歌WSL的,大部分人啊,不管吃了多少crap,都是一转眼就忘了的。

sales的角度出发,如果什么port的事情都不想干,最好的办法是装虚拟机,那个基本
上保证能work。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我倒没用开源的库。问题是wsl装上,再要求salesman/customer去app store装相应的
: Linux,这个过程麻烦,且不robust。关键是售前工作的对象不是工程师。装软件他们会
: 出各种马工认为很愚蠢的问题。
: 这和售后是完全不同的。
: <br>: WSL是個模擬器,如果你就是打算開發windows下面的native 程序,WSL對
: 你沒什
: 麼用。
: <br>: 如果你這個native程序裏面還用了開源的庫,你幾乎肯定應該用MingW。
: <br>

c
chebyshev

1.
VS我用过。用VS,console application,除了要加无数各种下划线,malloc写法都要
改。
几乎必然是要改source code。换句话说,VS不完全兼容ANSI C。现在有开源项目在试
图解决这问题,但是还不成熟。

2.
Mingw是项目名,不是compiler名称。你要换里面的东西,没有文档支持本身就是风险
和麻烦。
Mingw有不少办法换别的CRT,但是一来不是offically document的。二来也会有别的
windows相关特定的问题。三来换crt压根不是你说的那么简单。有的silicon startup mcu的
工具链是在mingw基础上的,我前不久还和一家谈过,看过他们介绍。

相比之下,cygwin已经现成换好的,为何不用?cygwin用的其他几个库,我查过微软的policy。
支持不支持有啥好争论的呢。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 指定CRT是用mingw的基本技能,你不愿意学OK,到处download碰到一个能用的也行,但
: 是把个人尝试得到的经验拿来当教条,这显然是错的。
: 还有,不要去说什么"微软不支持",微软支持cygwin了?你试过了somehow能用你还不是
: 就涌上了,你真的管微软支持了?而且我发现你其实也没用过微软"支持的"VS,你知道
: 2000年之后VS的C++程序从编译到分发的流程有多麻烦吗?还有你知道要用VS port一个
: 开源的软件有多少事情要干?这里面每一件事都比你这个换lib的事麻烦10倍。
: 盲人摸象没问题,正常人把眼睛闭着去摸象这就有点好笑了。
: 還是

n
netghost

所以VS在你看来也是不能用的,而且还没到库兼容的一步。

MingW就是gcc的一个port,所谓port就是gcc的我文档在没有特殊情况下是apply的,啥叫做officially document?GCC就是officially document。

你的问题根本不是MingW的问题,是你不知道gcc怎么link一个自己指定的library的问
题,这件事情在Linux下面一样有只不过你没遇到过而已。

我再次告诉你这事情我干过很多遍,很简单,你想说我瞎扯是吗?你愿意打赌吗?

我只是指出来,如果这个问题恰好是你先用了cygwin不work,然后换到mingw work你现在的说法就是反过来的,你自己想吧。

【 在 chebyshev (......) 的大作中提到: 】
: 1.
: VS我用过。用VS,console application,除了要加无数各种下划线,malloc写法都要
: 改。
: 几乎必然是要改source code。换句话说,VS不完全兼容ANSI C。现在有开源项目在试
: 图解决这问题,但是还不成熟。
: 2.
: Mingw是项目名,不是compiler名称。你要换里面的东西,没有文档支持本身就是风险
: 和麻烦。
: Mingw有不少办法换别的CRT,但是一来不是offically document的。二来也会有别的: windows相关特定的问题。三来换crt压根不是你说的那么简单。有的silicon
startup
: ...................

c
chebyshev

gcc换库,你还得查别的库之依赖性。库A如果是B版本关联的.
你把B换了。A也要换对应的。对不对?说不定很多东西要重新build。查不少文档免不
了的。
Mingw或者Mingw 64换CRT,这不是你想的那么简单。

按你的想象,gcc和其他都是分开的。所以Mingw不存在支持不支持什么库的问题。
一行Link完事。这只是理论而已。本身Mingw 64换universal CRT搞了好久才算支持。
然后我看了下,还不见得可靠。至少要等等爱会考虑。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 所以VS在你看来也是不能用的,而且还没到库兼容的一步。
: MingW就是gcc的一个port,所谓port就是gcc的我文档在没有特殊情况下是apply的,啥
: 叫做officially document?GCC就是officially document。
: 你的问题根本不是MingW的问题,是你不知道gcc怎么link一个自己指定的library的问
: 题,这件事情在Linux下面一样有只不过你没遇到过而已。
: 我再次告诉你这事情我干过很多遍,很简单,你想说我瞎扯是吗?你愿意打赌吗?
: 我只是指出来,如果这个问题恰好是你先用了cygwin不work,然后换到mingw work你现
: 在的说法就是反过来的,你自己想吧。
: startup

n
netghost

你用cygwin的库,你一样没去查任何第三方的库的依赖性,仅仅是你目前把结果攒出来而已。你更不可能去client机器上都查一遍it的所有和你那个cygwin1.dll相关的库是
不是你那个。偷懒的事情大家都干过,但是硬要找个道理就没意思了。

【 在 chebyshev (......) 的大作中提到: 】
: gcc换库,你还得查别的库之依赖性。库A如果是B版本关联的.
: 你把B换了。A也要换对应的。对不对?说不定很多东西要重新build。
: 所以mingw换库,跟link写一行不是一回事。
: 关键是你还得查别的库。别的库如果没有你说的新库的版本,或者不兼容了呢?
: 这事没你想的那么简单。集成的,用别的库的现成script/tool 可能有,
: 但那不就跟cygwin类似了么。我何必呢?
: VS是另一回事。其本身不是完全兼容C标准库的,就那几个string相关的函数。
: 大概率代码要改不少地方。你用过就知道。

c
chebyshev

cygwin是不用msvcrt的package。cygwin1.dll都多少年了。这是两回事。
我又不要换cygwin1.dll,查第三方库依赖做什么。msft的其他库我查过了。

你低估了Mingw换库的难度和工作量。不信试下就知道了。
本身Mingw 64支持universal CRT搞了好久。

理论上gcc跟库是两回事。实际上Mingw/64支持不支持别的什么crt,这个问题是存在的。
我以前折腾过别的基于Mingw的tool chain,工作量心里有数。
网上讨论有很多。换crt库,几乎等于自造tool chain。不是偷懒不偷懒的问题。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你用cygwin的库,你一样没去查任何第三方的库的依赖性,仅仅是你目前把结果攒出来
: 而已。你更不可能去client机器上都查一遍it的所有和你那个cygwin1.dll相关的库是
: 不是你那个。偷懒的事情大家都干过,但是硬要找个道理就没意思了。

n
netghost

我反复告诉这事情我干过,你是有意看不见还是咋地?这样吧,你把你的程序拿出来,编成.o给我,你看我需要多久给你link出来,OK?这件事情我之所以和你扯了这么一大堆,exactly是因为这是我的工作范围,所以你模棱两可是过不去的。

此外,你说mingw不支持别的crt,这是对别人工作的不尊重,首先有标准做法link别的crt,这个严格来说和MingW无关,另外mingw一直都在update 自己的imports,仅仅是
以为legal的原因不能捆绑mscrt,里面能做的工作都做了。这才是我说为啥就写一行就
够的原因,否则还是需要干一些事情的。当然我估计你没干过这个,所以之前我都没提。

【 在 chebyshev (......) 的大作中提到: 】
: cygwin是不用msvcrt的package。cygwin1.dll都多少年了。这是两回事。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以你的程序只连接了cygwin1.dll?那你之前闹什么第三方库的问题?搞笑么。
: 我又不要换cygwin1.dll,查第三方库依赖做什么。msft的其他库我查过了。
: 你低估了Mingw换库的难度和工作量。不信试下就知道了。
: 本身Mingw 64支持universal CRT搞了好久。
: 理论上gcc跟库是两回事。实际上Mingw/64支持不支持别的什么crt,这个问题是存在的。
: 我以前折腾过别的基于Mingw的tool chain,工作量心里有数。
: 网上讨论有很多。换crt库,几乎等于自造tool chain。不是偷懒不偷懒的问题。

g
guvest

我说的是MingW换成别的CRT。不是我的程序换别的CRT。这你发布个,或者找个Mingw
不用msvcrt的包,我乐于一试。这跟你干过啥没关系。我只管最好的solution。

网上有别人提的Mingw bug,和程序。你换换看怎么fix 就可以。
【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: 我反复告诉这事情我干过,你是有意看不见还是咋地?这样吧,你把你的程序拿
出来,
<br>: 编成.o给我,你看我需要多久给你link出来,OK?这件事情我之所以和你扯了这
么一大
<br>: 堆,exactly是因为这是我的工作范围,所以你模棱两可是过不去的。
<br>: 此外,你说mingw不支持别的crt,这是对别人工作的不尊重,首先有标准做法
link别的
<br>: crt,这个严格来说和MingW无关,另外mingw一直都在update 自己的
imports,
仅仅是
<br>: 以为legal的原因不能捆绑mscrt,里面能做的工作都做了。这才是我说为
啥就写
一行就
<br>: 够的原因,否则还是需要干一些事情的。当然我估计你没干过这个,所以之前我
都没提。
<br>: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br>: 所以你的程序只连接了cygwin1.dll?那你之前闹什么第三方库的问题?
搞笑么。
<br>: 的。
<br>

n
netghost

所以你就是要双击setup然后啥也不干呗,还有啥好闹的。。哪天cygwin不work了,你
就继续google呗。

到现在你还是觉得一个负责port compiler的人应该take care你这样要spoon feeding
的人 - 只按setup.exe安装完事,绝对一行文件不改,对的 - 可以下载10次,search
几天,但是不愿意搞懂什么叫做linking,然后去改一行文件的。

对不起,我觉得MingW不应该提供这样的服务,因为没有意义。也没有人能提供这样的
服务,这是开发工具,不是一个iphone app。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我说的是MingW换成别的CRT。不是我的程序换别的CRT。这你发布个,或者找个Mingw
: 不用msvcrt的包,我乐于一试。这跟你干过啥没关系。我只管最好的solution。
: 网上有别人提的Mingw bug,和程序。你换换看怎么fix 就可以。
: <br>: 我反复告诉这事情我干过,你是有意看不见还是咋地?这样吧,你把你的
: 程序拿
: 出来,
: <br>: 编成.o给我,你看我需要多久给你link出来,OK?这件事情我之所以和你
: 扯了这
: 么一大
: <br>: 堆,exactly是因为这是我的工作范围,所以你模棱两可是过不去的。
: ...................

g
guvest

不是的。首先这问题很有价值。原因不多说。

我和你的观点之不同,在于我认为换库自制Mingw based的tool chain,对Mingw来说不容易,等于一个at least one week的小项目。且还不能保证可以解决前面有人给代码
的程序的问题。(我的程序就不说了)

你觉得就是几行的事。是基本技能。

我的判断未必正确(one week working load)。其基础来自于实际经验。我之前折腾过
有的MCU测试版七拼八
凑的,
Mingw based 的换过库的tool chain。(尽管我没从头build过Mingw。但是用过这样做出来的tool chain。其问题一言难尽。嵌入式这块有不少讨论。)

对你这边,就是说Mingw换库的working load以及结果如何,你试下换库。
或者看下社区的email list讨论就知道了。当然也可能你技术高超,2小时全搞好了。

对我这边,过几天我还会revisit这问题。自己从source build下Mingw,看看从头build的
麻烦主要在什么地方。

观点来自于经验。所以有不同的看法很正常。

你要说你是高级用户。我是小白用户。Mingw不是我这类小白用户用的。
我完全可以接受。不会用装着会用有什么意思。

但是在我这里,所有的结论只能来自于实证。不在谁说什么。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: 所以你就是要双击setup然后啥也不干呗,还有啥好闹的。。哪天cygwin
不work
了,你

: 就继续google呗。

: 到现在你还是觉得一个负责port compiler的人应该take care你这样要
spoon
feeding

: 的人 - 只按setup.exe安装完事,绝对一行文件不改,对的 - 可以下载
10次,
search

: 几天,但是不愿意搞懂什么叫做linking,然后去改一行文件的。

: 对不起,我觉得MingW不应该提供这样的服务,因为没有意义。也没有人
能提供
这样的

: 服务,这是开发工具,不是一个iphone app。

n
netghost

你的問題僅僅是mingw選擇crt的事情,爲什麼要搞到rebuild toolchain上面去?這件
事情definitely不是一個week,也不是一天,也不是一個小時,而是一分鐘的事情。

如果你真想搞這一類事情,我建議還是每件事分開搞,否則會折騰過去過來不得要領,浪費時間。

而且我也说了,用cygwin能解决问题,对你目前应该是OK的,但是generalization就没必要,甚至有害。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 不是的。首先这问题很有价值。原因不多说。
: 我和你的观点之不同,在于我认为换库自制Mingw based的tool chain,对Mingw来说不
: 容易,等于一个at least one week的小项目。且还不能保证可以解决前面有人给代码
: 的程序的问题。(我的程序就不说了)
: 你觉得就是几行的事。是基本技能。
: 我的判断未必正确(one week working load)。其基础来自于实际经验。我之前折腾过
: 有的MCU测试版七拼八
: 凑的,
: Mingw based 的换过库的tool chain。(尽管我没从头build过Mingw。但是用过这样做
: 出来的tool chain。其问题一言难尽。嵌入式这块有不少讨论。)
: ...................

g
guvest

不是用gcc --spec=msvcrt100 之类的一行就搞定的。你改改spec file啥的。
你的机器搞好了,我的也未必能用。
我自己的看法不说。给你看个网上的例子:

After correct 'specs' file, add 'msvcr80' I see error:
C:\test>gcc -specs=msvcr80 -mwindows mini2.c -omini2_80
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../crt2.o:crt1.c:(.text+
0x2f):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../crt2.o:crt1.c:(.text+
0xc1):
undefined reference to `[email protected]'
C:\TEMP/ccG5DYdf.o:mini2.c:(.text+0x26): undefined reference to
`[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):
main.c:(.text+0x19):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):
main.c:(.text+0x26):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):
main.c:(.text+0xa2):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/libgcc.a(w32-shared-ptr.o):(.text+0x31):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/libgcc.a(w32-shared-ptr.o):(.text+0x159):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/libgcc.a(w32-shared-ptr.o):(.text+0x2b1):
undefined reference to `[email protected]'
C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/libgcc.a(w32-shared-ptr.o):(.text+0x2d2):
undefined reference to `[email protected]'
collect2: ld returned 1 exit status

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你的問題僅僅是mingw選擇crt的事情,爲什麼要搞到rebuild toolchain上面去?這件
: 事情definitely不是一個week,也不是一天,也不是一個小時,而是一分鐘的事情。: 如果你真想搞這一類事情,我建議還是每件事分開搞,否則會折騰過去過來不得要領,
: 浪費時間。
: 而且我也说了,用cygwin能解决问题,对你目前应该是OK的,但是generalization就没
: 必要,甚至有害。

g
guvest

mingw改spec,连接到别的库这个网上讨论多的是。就先不说。

还有一个debug分支是wdong说的。我也考虑可能是windows设置的问题。
debug heap on/off什么的。

cygwin1.dll可以跳过这些问题。cygwin most likely只与其自身设置有关。
与用户windows之具体情况无关。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 不是用gcc --spec=msvcrt100 之类的一行就搞定的。你改改spec file啥的。
: 你的机器搞好了,我的也未必能用。
: 我自己的分析会考虑不说。给你看个网上的例子:
: After correct 'specs' file, add 'msvcr80' I see error:
: C:test>gcc -specs=msvcr80 -mwindows mini2.c -omini2_80
: C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../crt2.o:crt1.c:(.text+
: 0x2f):
: undefined reference to `[email protected]'
: C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../crt2.o:crt1.c:(.text+
: 0xc1):
: ...................

n
netghost

2008年的例子,你在refer一个项目 13年前的东西,这个搞法就算你用VS,甚至Java你也是只能挠墙。再不说,你从这个帖子里面搞懂了什么?你试过了吗?

“你的机器搞好了,我的也未必能用。”,所以现在情况出来了,一个人可以始终重复另外一个人企图让他明白一句话,但是他的每个行动都在go against这句话。我只能说,人和人communication的效率就是渣,行了吧?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 不是用gcc --spec=msvcrt100 之类的一行就搞定的。你改改spec file啥的。
: 你的机器搞好了,我的也未必能用。
: 我自己的分析会考虑不说。给你看个网上的例子:
: After correct 'specs' file, add 'msvcr80' I see error:
: C:\test>gcc -specs=msvcr80 -mwindows mini2.c -omini2_80
: C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../crt2.o:crt1.c:(.text+
: 0x2f):
: undefined reference to `[email protected]'
: C:/Lang/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../crt2.o:crt1.c:(.text+
: 0xc1):
: ...................

n
netghost

多的是和你有什么关系?你自己还是不会啊。。你如果懂了,就不会来抱怨一个缺损设置搞得你用不了别的crt不是吗?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: mingw改spec,连接到别的库这个网上讨论多的是。就先不说。
: 还有一个debug分支是wdong说的。我也考虑可能是windows设置的问题。
: debug heap on/off什么的。
: cygwin1.dll可以跳过这些问题。cygwin most likely只与其自身设置有关。
: 与用户windows之具体情况无关。

g
guvest

我说你的机器搞好了,我的未必能用。意思是这问题是windows设置有关的。

你嫌我给的例子老。自己搜啊。msvcrtxxx.dll mingw问题一大堆。
哪个说一行能搞好的。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 2008年的例子,你在refer一个项目 13年前的东西,这个搞法就算你用VS,甚至Java你
: 也是只能挠墙。再不说,你从这个帖子里面搞懂了什么?你试过了吗?
: “你的机器搞好了,我的也未必能用。”,所以现在情况出来了,一个人可以始终重复
: 另外一个人企图让他明白一句话,但是他的每个行动都在go against这句话。我只能说
: ,人和人communication的效率就是渣,行了吧?

g
guvest

多的是问题。你看就知道了。
我不会,这是对的。网上的一行改spec我以前折腾过。
你现在试下就知道。

你说几行就搞定。这话说出来,并不能显示你搞过。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 多的是和你有什么关系?你自己还是不会啊。。你如果懂了,就不会来抱怨一个缺损设
: 置搞得你用不了别的crt不是吗?

n
netghost

对的,和windows设置有关,所以这事情最重要的不是用什么,而是你必须要ship你用
的工具的dependency,懂了?

你的问题exactly就是用了某个叫做cygwin的东西,认为别人的机器上面也有一样的设
置,然后觉得这样就完事大吉可以一直用下去了。我要指出的问题exactly就是这个。

我知道怎么搞,我为什么要搜?你真以为google走天下么?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我说你的机器搞好了,我的未必能用。意思是这问题是windows设置有关的。
: 你嫌我给的例子老。自己搜啊。msvcrtxxx.dll mingw问题一大堆。
: 哪个说一行能搞好的。

n
netghost

你试过?你的错是啥?贴出来呗。版本号,错误内容,1 2 3。嘴炮有啥意思吗?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 多的是问题。你看就知道了。
: 我不会,这是对的。网上的一行改spec我以前折腾过。
: 你现在试下就知道。
: 你说几行就搞定。这话说出来,并不能显示你搞过。

g
guvest

按改spec的办法改不出来的报错,网上多的是。
我贴不贴的,这是个客观现实好吧。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你试过?你的错是啥?贴出来呗。版本号,错误内容,1 2 3。嘴炮有啥意思吗?

g
guvest

我早说了不是要ship。要ship我的看法还是vs studio最好。尤其对有vs的人的公司
来说。

我需要的是让sales/business man最容易的装好,跑起来。
再者本身cygwin1.dll与windows设置之关联不大。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 对的,和windows设置有关,所以这事情最重要的不是用什么,而是你必须要ship你用
: 的工具的dependency,懂了?
: 你的问题exactly就是用了某个叫做cygwin的东西,认为别人的机器上面也有一样的设
: 置,然后觉得这样就完事大吉可以一直用下去了。我要指出的问题exactly就是这个。
: 我知道怎么搞,我为什么要搜?你真以为google走天下么?

n
netghost

所以就是没试过呗。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 按改spec的办法改不出来的报错,网上多的是。
: 我贴不贴的,这是个客观现实好吧。

g
guvest

你可以认为我没改过。
你说的一行几行搞好,是改什么地方。
我从不跟solution过不去。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 所以就是没试过呗。

n
netghost

你可以先按你查到的结果改一下,看看是不是还是有问题。还是你不知道怎么改?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你可以认为我没改过。
: 你说的一行几行搞好,是改什么地方。
: 我从不跟solution过不去。

n
netghost

你拿VS ship过吗?还是你的感觉?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我早说了不是要ship。要ship我的看法还是vs studio最好。尤其对有vs的人的公司
: 来说。
: 我需要的是让sales/business man最容易的装好,跑起来。
: 再者本身cygwin1.dll与windows设置之关联不大。

g
guvest

我之前公司有专门ship的人。我做个库给他们作为tool chain的一部分。
问题很熟悉
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你拿VS ship过吗?还是你的感觉?

g
guvest

你可以认为我不知道怎么改。或者改坏了。这没什么关系。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你可以先按你查到的结果改一下,看看是不是还是有问题。还是你不知道怎么改?

n
netghost

我认为你没改,至于你为什么是那个情况,我不知道。

f(x1, x2, x3....) = 0, 改动x_i可以让输出编成1,也可以不停地去找(y1, y2, ...)或者(z1, z2, ....), (w1, w2...), 放进去看看f是不是就变成了1。后面这个做法,
没有什么一定不对,但是一定要说这个找到的(z1, z2 ....)是一个对别的函数g输出是1的可能性更高,不make sense.

不管怎么说,你没有试过一个可能,但是却rule out了这个可能,只能是你的个人观点而已。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你可以认为我不知道怎么改。或者改坏了。这没什么关系。

g
guvest

我没改或者我折腾过。
这都改变不了Mingw most likly不是一行就可以改好这个现状。
我不需要与人讨论我干过什么。

你随便找个半导体公司各种计算芯片,不少tool chain里面都有vs和Mingw。
折腾Mingw要花多少工时,来自于我的经验。

你认为改Mingw等于是gcc改link。
我没啥好评论的。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 我认为你没改,至于你为什么是那个情况,我不知道。
: f(x1, x2, x3....) = 0, 改动x_i可以让输出编成1,也可以不停地去找(y1, y2, ...)
: 或者(z1, z2, ....), (w1, w2...), 放进去看看f是不是就变成了1。后面这个做法,
: 没有什么一定不对,但是一定要说这个找到的(z1, z2 ....)是一个对别的函数g输出是
: 1的可能性更高,不make sense.
: 不管怎么说,你没有试过一个可能,但是却rule out了这个可能,只能是你的个人观点
: 而已。

n
netghost

不要去讲别人,讲你的case,你的情况exactly就是换了一个lib,which你不知道怎么
换,然后被迫装了一个cygwin,whole point就是为了让it帮你把那一行给改掉,虽然
为此你需要搭一个posix translation layer进你的application,当然你也不care,而且我也说过了,这么搞的人你不是第一个也不是最后一个。问题是,你那这个来作为解决性能问题的方案,这就是信口开河了。

你出问题的case的程序是跑嵌入式上面的?如果是你为啥要扯msvcrt?嵌入上面跑
windows 7?如果不是,你去扯工具链,嵌入式干什么?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我没改或者我折腾过。
: 这都改变不了Mingw most likly不是一行就可以改好这个现状。
: 我不需要与人讨论我干过什么。
: 你随便找个半导体公司各种计算芯片,不少tool chain里面都有vs和Mingw。
: 折腾Mingw要花多少工时,来自于我的经验。
: 你认为只改几行。以及改Mingw等于是gcc改指定的link库。
: 我没啥好评论的。
: .)

g
guvest

msvcrt不是换一行spec的问题。你不同意我没啥意见。

原理前面解释link的时候。我已经解释过了,Mingw链接阶段会用别的.a文件。其可
能是使用msvcrt build的。

类似link依赖问题在Mingw为基础的MCU工具链时候也常见。实际上我机器上的一个
Mingw,mysys就是别人给的。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 不要去讲别人,讲你的case,你的情况exactly就是换了一个lib,which你不知道怎么
: 换,然后被迫装了一个cygwin,whole point就是为了让it帮你把那一行给改掉,虽然
: 为此你需要搭一个posix translation layer进你的application,当然你也不care,而
: 且我也说过了,这么搞的人你不是第一个也不是最后一个。问题是,你那这个来作为解
: 决性能问题的方案,这就是信口开河了。
: 你出问题的case的程序是跑嵌入式上面的?如果是你为啥要扯msvcrt?嵌入上面跑
: windows 7?如果不是,你去扯工具链,嵌入式干什么?

n
netghost

别的.a是别的.a,换msvcrt就是一行的事情,没了。。别的dependency更不能是用了
cygwin就能work的。

此外,不要去扯MCU,和你的问题没关系,cygwin你想distrubited到MCU去?搞笑么。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: msvcrt不是换一行spec的问题。你不同意我没啥意见。
: 原理前面你说改一行的时候。我已经解释过了,Mingw链接阶段会用别的.a文件。其可
: 能是使用msvcrt build的。
: 类似link依赖问题在Mingw为基础的MCU工具链时候也常见。实际上我机器上的一个
: Mingw,mysys就是别人给的。

g
guvest

Mingw gcc编译和link的时候。gcc.exe自己会用别的.a文件。那些有的是用Msvcrt的。所以你换的话,往往还有很多别的事要做。这个概念很难理解吗?

不是我的程序要用到什么.a文件。

你只换msvcrtxxx,经常gcc会报错的。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 别的.a是别的.a,换msvcrt就是一行的事情,没了。。别的dependency跟不能是用了: cygwin就能work的。
: 此外,不要去扯MCU,和你的问题没关系,cygwin你想distrubited到MCU去?搞笑么。

n
netghost

这件事apply到所有你把crtfoo换成crtbar的情况,只要你不知道从哪里copy来一个.a
,然后自己换了中间的dependancy都统统有这个问题。好了,现在你把msvcrt换成了
cygwin1.dll,你为啥不care别的.a没问题?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Mingw gcc编译和link的时候。gcc.exe自己会用别的.a文件。那些有的是用vc6做的。
: 所以你换的话,往往还有很多别的事要做。这个概念很难理解吗?
: 不是我的程序要用到什么.a文件。
: 你只换msvcrtxxx,经常gcc会报错的。

g
guvest

For the Cygwin case, nothing needs to be “replaced by xxx” .

All those files (gcc.exe, cygwin1.dll, .a, .dll, specs, ...etc ) are
compatible since they are installed at the same time.

For using the correct gcc.exe, the path need to be fixed.

【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: 这件事apply到所有你把crtfoo换成crtbar的情况,只要你不知道从哪里
copy来
一个.a

: ,然后自己换了中间的dependancy都统统有这个问题。好了,现在你把
msvcrt换
成了

: cygwin1.dll,你为啥不care别的.a没问题?

n
netghost

这个恰恰是因为你的情况cygwin1是work的,如果情况反过来,你需要替换cygwin1.dll,你立刻就会面临同样的问题。懂了?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 标 题: Re: mingw问题分析和解决
: 发信站: BBS 未名空间站 (Tue Mar 23 18:21:15 2021, 美东)
:
: For the Cygwin case, nothing need to be “replaced by xxx” .
:
: For installing the gcc of Cygwin, I clicked the checkbox and
: lots of files was installed
: together. All those files (.a, dll, specs, ...etc ) are compatible since : they are installed at the same time.
:
:
:
:
: 【 在 netghost(Up to Isomorphism) 的大作中提到: 】
: <br>: 这件事apply到所有你把crtfoo换成crtbar的情况,只要你不知道从哪里
: copy来
: 一个.a
: <br>: ,然后自己换了中间的dependancy都统统有这个问题。好了,现在你把: msvcrt换
: 成了
: <br>: cygwin1.dll,你为啥不care别的.a没问题?
: <br>
:
:
:
:
:
:
:
: --
g
guvest

你以为gcc改个一行那么简单。
所以才会考虑换库这回事。

我机器上有四个gcc.exe,包括Cygwin 。
不管哪个出了问题。都不会考虑换库。
其都是ship together 的。
所以换库
这个选项在我这里压根不存在。

我第一页就说过这个依赖问题。
你是不是漏看了?

"
【3】
问题是Mingw无法用不同版本号的msvcrtxxx.dll,
因为你得其它的库都弄成一样的版本号,重新自己build。这个不太可持续。
所以基本上可以说Mingw是没啥保障的项目。
"

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 这个恰恰是因为你的情况cygwin1是work的,如果情况反过来,你需要替换cygwin1.
dll
: ,你立刻就会面临同样的问题。懂了?

n
netghost

cygwin就是“换库”的一种,只是别人给你换了,所以你觉得OK。此外,cygwin是可以不连接cygwin1.dll,这事估计你也是不知道的。说白了,就是一个东西上面没有盖一
个章,你就不认识那种。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你以为gcc改个一行那么简单。
: 所以才会考虑换库这回事。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
换crt就是一行的事情。而且你之前并不知道这么简单。这件事你越争问题越多。
: 我机器上有四个gcc.exe,包括Cygwin 。
: 不管哪个出了问题。都不会考虑换库。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
因为你自己不懂怎么搞,只能用安装缺损方案,不敢越雷池一步,因为一出去就会踩雷。
: 其都是ship together 的。
~~~~~~~~~~~~~~~~~~~~~~~~
你知道什么叫做ship together吗?估计你也不知道dll是怎么work的。
: 所以换库
: 这个选项在我这里压根不存在。
: 我第一页就说过这个依赖问题。
: 你是不是漏看了?
: "
: ...................

g
guvest

前面说清楚了库依赖问题是存在的。
现在又认为这问题不存在了?回到一行解决了?

你扯的都没边了。Cygwin 是不同的approach,哪是Mingw 换个crt就能出来的。

Cygwin连着Mingw用是我第一页就写了的好不好。
你是不是看不懂啊。
【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: cygwin就是“换库”的一种,只是别人给你换了,所以你觉得OK。此外,cygwin
是可以
<br>: 不连接cygwin1.dll,这事估计你也是不知道的。说白了,就是一个东西
上面没
有盖一
<br>: 个章,你就不认识那种。
<br>: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br>: 换crt就是一行的事情。而且你之前并不知道这么简单。这件事你越争问
题越多。
<br>: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br>: 因为你自己不懂怎么搞,只能用安装缺损方案,不敢越雷池一步,因为一出去就
会踩雷。
<br>: ~~~~~~~~~~~~~~~~~~~~~~~~
<br>: 你知道什么叫做ship together吗?估计你也不知道dll是怎么work的。
<br>

n
netghost

换crt当然是一行的事情。你的问题在于,没搞清楚这一行是干什么的。所以你也不敢
用。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 前面说清楚了库依赖问题是存在的。
: 现在又认为这问题不存在了?回到一行解决了?
: 你扯的都没边了。Cygwin 是不同的approach,哪是Mingw 换个crt就能出来的。
: Cygwin连着Mingw用是我第一页就写了的好不好。
: 你是不是看不懂啊。
: <br>: cygwin就是“换库”的一种,只是别人给你换了,所以你觉得
: OK。此外,cygwin
: 是可以
: <br>: 不连接cygwin1.dll,这事估计你也是不知道的。说白了,就是一个东西
: 上面没
: ...................

g
guvest

兼容性又忘了?
就算不考虑msvcrt兼容性。也不是所有的cvrtxxx就改个一行头文件就可以的。
我用过很多定制的Mingw。不然不会说第一页的话。只是你听不懂而已。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 换crt当然是一行的事情。你的问题在于,没搞清楚这一行是干什么的。所以你也不敢
: 用。

g
guvest

另外你说我不懂所以不敢用。这话是對的。
不懂装懂,然后硬撑着。有什么意思呢?
我写码都是defensive第一。靠的就是不敢二字。

之前我的经验在于跑过别人做cross compiler工具链的步骤一二三四五.....。
哪里哪里做什么而已。最多也就是知道哪里有trouble。那离自己搞工具链还远着。

Mingw换库是类似的。我并没有把Mingw从source build一遍。所以不会夸口能换Mingw
的東
西。

但是我告诉你一件事:
msvcrt文件换掉,各种头文件弄好,gcc spec啥的弄好。你能想到的都弄好。gcc照样
可能因此而报错。信不信由你。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: 换crt当然是一行的事情。你的问题在于,没搞清楚这一行是干什么的。
所以你
也不敢

: 用。

n
netghost

对的,你“用过”很多不同的toolchain,但是你还是不知道该怎么换一个lib,确切来说你仍然不知道怎么在windows 平台下自己管理库的dependency的问题,这就是问题所在:
装100次不同的软件,但是除了setup之外,不知道别的任何东西,对自己的skill 也没有任何build up。因为你care的就是在不学任何东西的前提(不是时间最短)下,解决自己眼前的最急迫的问题。

我没有兴趣去criticize你这种做法 - as long as你觉得这个办法最comfortable。但
是我不能认同你觉得这种做法得出的结论是一个可以推荐给别人的东西,因为你为了前面那个前提牺牲了太多的客观性,就这样。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 兼容性又忘了?
: 就算不考虑msvcrt兼容性。也不是所有的cvrtxxx就改个一行头文件就可以的。
: 我用过很多定制的Mingw。不然不会说第一页的话。只是你听不懂而已。

g
guvest

除了第一页说的link依赖性。我再告诉你一个东西。

Mingw 之gcc.exe等等是什么东西制作的?其不是Mingw 之
gcc.exe编译gcc之source出来的。
换言之,它不是鸡生蛋蛋生鸡的办法做出来的。
这就是其架构的根本问题。取巧就要有代价。

完整的compiler要有runtime库等等支持才能用。
runtime库等等又要compiler才能制作出来。这问题怎么办,你自己想吧。

Mingw 作者弄的换库的办法随便玩玩可以。你用了,那么结果就类似于vc6制作的exe,消
耗VC8的程序。不管你设计什么换库的办法。没有例外。几十年不断出问题,道理就在
这儿。

相比之下,什么一行换库之类的,那都是google下找找头文件层面的事。
我说工具链要找整体制作出来的。(除非你有时间自己从头做)
所以你觉得我是一个按钮走到底的小白用户。我压根无所谓。
【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: 对的,你“用过”很多不同的toolchain,但是你还是不知道
该怎么换一个lib,
确切来

: 说你仍然不知道怎么在windows 平台下自己管理库的dependency的问题,
这就是
问题所

: 在:

: 装100次不同的软件,但是除了setup之外,不知道别的任何东西,对自己的
skill 也没

: 有任何build up。因为你care的就是在不学任何东西的前提(不是时间最
短)下
,解决

: 自己眼前的最急迫的问题。

: 我没有兴趣去criticize你这种做法 - as long as你觉得这个办法最
comfortable。但

: 是我不能认同你觉得这种做法得出的结论是一个可以推荐给别人的东西,
因为你
为了前

: 面那个前提牺牲了太多的客观性,就这样。

n
netghost

你啰啰嗦嗦说了这么一大堆,我看到的只有如下几个事实:
1. VS Studio你没用过。
2. Mingw换库你没搞过,不是失败了,是没敢搞过,因为你"觉得"不work。
3. cygwin你装上试了,似乎能解决某个你的程序的性能问题,所以你推荐别人用来解
决性能问题。

所以你这些结论仅仅是你个人的一次经验,没了。

至于什么“vc6程序消耗vc8程序”这种自己造的词,还是别用了,你在compiler和
linking方面知道甚少,把技术上面有严格定义的过程比喻成日常生活的词只能让你的
概念越来越混乱。

mingw被用来编译各种上百万行的代码,嗯,看来这些程序随时都会崩是吧?你不觉得
你自己连基本的sense都没了吗?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Mingw 之gcc.exe等等是什么东西制作的?
: 它不是鸡生蛋蛋生鸡的办法做出来的。
: (能听懂吗?)
: vc6做的程序,要消耗vc8版本制作的程序。
: 不断的出问题是正常。
: 你所谓的“会换库”之逻辑就是这么回事。
: Mingw架构在这方面是weak的。
: Mingw那个换库的指引的假设非常强。
: 这些假设之对错不控制在其手里。
: 这种工具链。
: ...................

g
guvest

Mingw编译几百万行代码,是一行换库造的吗?不build别的文件?
你扯的都没边了。

你花了多久才意识到我第一页讲的link的库的依赖问题。
我说的第二个问题你从Mingw之gcc.exe是哪个vc build出来的开始,慢慢想。

再纠正一次。我没有推荐别人用cygwin解决性能问题。

Mingw架构有取巧带来的问题。我说的。谁信不信,谁懂谁不懂,无所谓。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你啰啰嗦嗦说了这么一大堆,我看到的只有如下几个事实:
: 1. VS Studio你没用过。
: 2. Mingw换库你没搞过,不是失败了,是没敢搞过,因为你"觉得"不work。
: 3. cygwin你装上试了,似乎能解决某个你的程序的性能问题,所以你推荐别人用来解
: 决性能问题。
: 所以你这些结论仅仅是你个人的一次经验,没了。
: 至于什么“vc6程序消耗vc8程序”这种自己造的词,还是别用了,你在compiler和
: linking方面知道甚少,把技术上面有严格定义的过程比喻成日常生活的词只能让你的
: 概念越来越混乱。
: mingw被用来编译各种上百万行的代码,嗯,看来这些程序随时都会崩是吧?你不觉得
: ...................

n
netghost

mingw是编译器,不是编辑器,造出来的事binary,基本概念不能错。

所以你推荐别人用cygwin干什么?这下没人能搞懂了。

你的问题在于不具体搞清楚技术概念,导致了脑子里面都是“鸡生蛋”,”消耗“程序这种自己形象化的概念,所以你才会花了这么多时间去到处search,download,
install,为了某个库换整个工具链!业界没这么玩的,不是每个人写程序都仅仅为了
live demo。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Mingw造几百万行代码,人家是一行换库造的吗?
: 另外我纠正一点。我没有推荐别人用cygwin解决性能问题。
: 你连compiler要搞鸡生蛋蛋升鸡都没弄明白呢。无谓多谈了。

g
guvest

第一我没有推荐别人用任何东西。

我个人首选是一体做出来的tool chain。
不考虑工具链换库。

道理说过了。
你不懂就算了。除了link依赖(我假设你意识到了)。

MingW gcc.exe是不是用MingW gcc.exe 从gcc source build出来的。
你从这里开始想。这就叫鸡生蛋蛋生鸡。

别吹什么业界。我之前经常release出货上亿的c code。tool chain本身就是自己组造
的。
吹这个于我没有意义。

用gcc的各种CPU组没有十万也有八万。谁release tool chain不重新build发布,
去叫用户搞一行换库的。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: mingw是编译器,不是编辑器,造出来的事binary,基本概念不能错。
: 所以你推荐别人用cygwin干什么?这下没人能搞懂了。
: 你的问题在于不具体搞清楚技术概念,导致了脑子里面都是“鸡生蛋”,
”消耗“程序
: 这种自己形象化的概念,所以你才会花了这么多时间去到处search,download,
: install,为了某个库换整个工具链!业界没这么玩的,不是每个人写程序都仅仅为了
: live demo。

g
guvest

另外我说你用过Mingw吗?啥时候Mingw成了编译器了?

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: mingw是编译器,不是编辑器,造出来的事binary,基本概念不能错。
: 所以你推荐别人用cygwin干什么?这下没人能搞懂了。
: 你的问题在于不具体搞清楚技术概念,导致了脑子里面都是“鸡生蛋”,”消耗“程序
: 这种自己形象化的概念,所以你才会花了这么多时间去到处search,download,
: install,为了某个库换整个工具链!业界没这么玩的,不是每个人写程序都仅仅为了
: live demo。

n
netghost

你已经凹到把自己的初衷给忘了,我提醒你一下把。

"我换Cygwin ,就是因为想 可靠的 换掉msvcrt而已。"

然后你所谓”可靠的“就是整体另外装一个工具链,所以你前前后后就是为了换一个
crt,重装一个工具链,理由是一知半解的”鸡生蛋蛋生鸡“理论,尽管你既不了解
toolchain编译过程对拿到toolchain之后编译的东西真的有什么影响,你也没真正试过任何一种import library的办法,你仍然坚信toolchain里面的library都是不能换的,并且告诉别人也该这么干。

问题是,这世界上有几个正经release软件的,仅仅因为一个要重link一个库,把整个
toolcchain重装着玩的??算你狠,行了?

发信人: guvest (我爱你老婆Anna), 信区: Programming
标 题: Re: mingw问题分析和解决
发信站: BBS 未名空间站 (Sun Mar 21 23:26:30 2021, 美东)

理论上compiler和各种库包括crt是两回事。
但是现实上很多compiler是和各种库ship together或者tied的。
(这个办法的优缺点,我前面贴的一个链接最后有讨论。)
我以前用过别的公司的c tool chain,这情况很清楚。

你觉得一行命令行,Mingw带的gcc就能用别的msvccrtxxx 来build?那只是理论上。其文档不
支持这样做(可能是因为很多别的库有复杂依赖)。

我换Cygwin ,就是因为想 可靠的 换掉msvcrt而已。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 第一我没有推荐别人用任何东西。
: 我个人首选是一体做出来的tool chain。
: 不考虑工具链换库。
: 道理说过了。
: 你不懂就算了。除了link依赖(我假设你意识到了)。
: MingW gcc.exe是不是用MingW gcc.exe 从gcc source build出来的。
: 你从这里开始想。这就叫鸡生蛋蛋生鸡。
: 别吹什么业界。我之前经常release出货上亿的c code。tool chain本身就是自己组造
: 的。
: 吹这个于我没有意义。
: ...................

g
guvest

你是不是现在还不知道crt有被用来 build Mingw其他的部分这回事?
所以认为crt就是一行重link就没事了?难怪你把Mingw说成编译器。

我第一页的话:
“因为Mingw还有不少别的库呢。你要换至少理论
上得重新用一致的msvcrtxxx.dll build一遍。这是技术面。”

我就差了一句,“那些别的库有的是用msvcrt build的。”
你就迷糊到现在。

gcc.exe怎么来的,你更不可能懂。
不仅仅gcc.exe生成的a.exe是一个winodws程序。
gcc.exe也是windows程序,它也用的msvcrt.dll。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你已经凹到把自己的初衷给忘了,我提醒你一下把。
: "我换Cygwin ,就是因为想 可靠的 换掉msvcrt而已。"
: 然后你所谓”可靠的“就是整体另外装一个工具链,所以你前前后后就是为了换一个: crt,重装一个工具链,理由是一知半解的”鸡生蛋蛋生鸡“理论,尽管你既不了解
: toolchain编译过程对拿到toolchain之后编译的东西真的有什么影响,你也没真正试过
: 任何一种import library的办法,你仍然坚信toolchain里面的library都是不能换的,
: 并且告诉别人也该这么干。
: 问题是,这世界上有几个正经release软件的,仅仅因为一个要重link一个库,把整个
: toolcchain重装着玩的??算你狠,行了?
: 发信人: guvest (我爱你老婆Anna), 信区: Programming
: ...................

n
netghost

你这个想法说明你只知道放狗搜,不搞懂为什么是有问题的。

你好好想想,有几个linux distribution事upgrade了glibc就一定要你编译器升级的?还有你成天说的java和golang,一台机器上面编译了装到别的机器上面都崩了?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你如果是tool chain maker,那么换crt库。
: 那么多半是要重新build然后再一起发出去。
: 不会有什么一行换库的事。你找任何一个cpu的application notes看就可以。

: Mingw被你说成编译器。难怪不知道有link依赖问题。
~~~~~~~~~~~~~~~~~~~~~~~
Mingw当然是编译器,你不用抓住我没说linker和别的部分来说事。反正我知道这里面
肯定没有你说的”编辑代码“的功能。
: 你是不是现在还认为crt就是重link就没事了?
: 这就是你对link的理解。

n
netghost

问题是你的东西根本就没有第三方库!你装模作样care dependency干啥呢?

mingw 作为toolchain在你能够call win32api的时候职能就结束了,说实话造一个CRT
的import都是给你发的福利而已。剩下的爱用什么用什么,没人有兴趣知道。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你如果是tool chain maker,那么换crt库。那么多半是要重新build然后再一起发出
去。
: 不会有什么一行换库的事。你找任何一个cpu的application notes看。
: Mingw被你说成编译器。难怪不知道有link依赖问题。
: 你是不是现在还认为crt就是重link就没事了?
: 这就是你对link的理解。
: 我的理解是第一页的话:
: “因为Mingw还有不少别的库呢。你要换至少理论
: 上得重新用一致的msvcrtxxx.dll build一遍。这是技术面。”

g
guvest

linux那是同一个平台的好不好。
你压根就没搞清楚跨平台怎么回事。

我不是抓你字眼。问题恰恰就出这些别的部分。你用工具可以查的出的好吧。技术细节我不会告诉你。
我前面写的编辑两个字明显是typo。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你这个想法说明你只知道放狗搜,不搞懂为什么是有问题的。
: 你好好想想,有几个linux distribution事upgrade了glibc就一定要你编译器升级的?
: 还有你成天说的java和golang,一台机器上面编译了装到别的机器上面都崩了?
: ~~~~~~~~~~~~~~~~~~~~~~~
: Mingw当然是编译器,你不用抓住我没说linker和别的部分来说事。反正我知道这里面
: 肯定没有你说的”编辑代码“的功能。

g
guvest

我的东西不用第三方库跟这问题压根没关系。

gcc.exe自己会调用Mingw包括的的用旧的msvcrt build出来的.a文件。
这很难理解?

原来你现在还没弄明白。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 问题是你的东西根本就没有第三方库!你装模作样care dependency干啥呢?
: mingw 作为toolchain在你能够call win32api的时候职能就结束了,说实话造一个
CRT
: 的import都是给你发的福利而已。剩下的爱用什么用什么,没人有兴趣知道。
: 去。

n
netghost

我的确震惊了,不过我somehow理解你为啥这么执着地要换lib就直接换toolchain这件
事了。

考虑到你还是想把事情搞清楚的,我也就不多评论了。我只能说思考是痛苦的,因为没彻底想清楚,在很多事情上面,尤其是实际工作上,还不如不想清楚。

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我的东西不用第三方库跟这问题压根没关系。
: gcc.exe自己会调用Mingw包括的的用旧的msvcrt build出来的.a文件。
: 这很难理解?
: 原来你现在还没弄明白。
: CRT

g
guvest

你把这问题想象成linux换glibc,这完全是错的。你压根没折腾过Mingw。
也没有在linux机器上折腾过别的cpu的tool chain。跨平台怎么回事你完全不知道。

我早就说了,你换msvcrtxxx,第一步换link,配置,头文件,etc。
(先不说是不是一行。我不扯你的字句。)

关键是,gcc.exe会调用Mingw包里面自带的,其他用msvcrt做出来的文件。
我不是说的我自己的第三方库。因为我不用第三方库。

所以版本不对就会出问题。这件事是不是事实,你自己去
分析。用了哪些文件,你自己查。

我就不说gcc.exe自己也是个windows程序,用啥build出来的也matters这回事了。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 我的确震惊了,不过我somehow理解你为啥这么执着地要干这件事了。
: 我只能说思考是痛苦的,因为没彻底想清楚,在很多事情上面,尤其是实际工作上,还
: 不如不想清楚。

n
netghost

你还想继续凹下去??

我只会问你两句话:
1. 你会不会换msvcrxxx,如果不会,请先学习怎么换。但是你貌似claim你知道。
2. 换了之后,发生了什么恐怖的情形?请告诉我。

我已经问过你无数次2会发生什么情况,你就是不回答,我只能认为你压根没试过在这
里乱讲。

此外,我根本不认为MSVCRT是你问题的根源,有那么多link MSVCRT的程序跑的好好的
,都没用fgets?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 你把这问题想象成linux换glibc,这完全是错的。你压根没折腾过Mingw。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我在windows下做得所有开发,除了VC的proj file都提供mingw的build,所以你这次是撞到我枪口上了。
: 也没有在linux机器上折腾过别的cpu的tool chain。跨平台怎么回事你完全不知道。: 我早就说了,你换msvcrtxxx,第一步换link,配置,头文件,etc。
: (先不说是不是一行。我不扯你的字句。)
: 关键是,gcc.exe会调用Mingw包里面自带的,其他用msvcrt做出来的文件。
: 我不是说的我自己的第三方库。因为我不用第三方库。
: 所以版本不对就会出问题。这件事是不是事实,你自己去
: 分析。用了哪些文件,你自己查。
: 我就不说gcc.exe自己也是个windows程序,用啥build出来的也matters这回事了。

c
chebyshev

你要换,头文件里有版本号好吧。你所谓的一行换crt是不是这个?
需要我告诉你哪个头文件,哪一行么。

但那也不是一行的事。一来有的msvcrxxx你要改别的地方。
二来包括版本号的头文件对不同的版本,还可能不一样。
我早先折腾过。

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 你还想继续凹下去??
: 我只会问你两句话:
: 1. 你会不会换msvcrxxx,如果不会,请先学习怎么换。但是你貌似claim你知道。
: 2. 换了之后,发生了什么恐怖的情形?请告诉我。
: 我已经问过你无数次2会发生什么情况,你就是不回答,我只能认为你压根没试过在这
: 里乱讲。
: 此外,我根本不认为MSVCRT是你问题的根源,有那么多link MSVCRT的程序跑的好好的
: ,都没用fgets?
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 我在windows下做得所有开发,除了VC的proj file都提供mingw的build,所以你这次是
: ...................

g
guvest

还是那句话。你现在还以为不需要重新build在
mingw/lib里别的文件。所以你压根不懂我第一页说的话。

【 在 chebyshev(......) 的大作中提到: 】
<br>: 你要换,头文件里有版本号好吧。你所谓的一行换crt是不是这个?
<br>: 需要我告诉你哪个头文件,哪一行么。
<br>: 但那也不是一行的事。一来有的msvcrxxx你要改别的地方。
<br>: 二来包括版本号的头文件对不同的版本,还可能不一样。
<br>: 我早先折腾过。
<br>

n
netghost

所以你还是不知道怎么一行换掉?你不是会吗?

这样吧,别的都别说了,你先搞出一个link到msvcrxxx的可执行文件再说,崩也号不崩也好,都OK。然后我们再继续说这东西能不能用的问题。否则浪费大家的时间没意义。

【 在 chebyshev (......) 的大作中提到: 】
: 你要换,头文件里有版本号好吧。你所谓的一行换crt是不是这个?
: 需要我告诉你哪个头文件,哪一行么。
: 但那也不是一行的事。一来有的msvcrxxx你要改别的地方。
: 二来包括版本号的头文件对不同的版本,还可能不一样。
: 我早先折腾过。

g
guvest

我明知有坑。为什么要改?你爱改那是你的事。
我早说了。你说我不知道这个那个。压根无关紧要。
是不是要重新build库文件。这没啥神秘的。
就算你没看过资料。
动动脑子也就能知道。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】

: 所以你还是不知道怎么一行换掉?你不是会吗?

: 这样吧,别的都别说了,你先搞出一个link到msvcrxxx的可执行文件再说,崩也号不崩

: 也好,都OK。然后我们再继续说这东西能不能用的问题。否则浪费大家的时间没意义。

n
netghost

早就没人care你知不知道了,重要的事你觉得你对你不知道的事情有很strong的
opinion。

比如说,一个lib不对就只能换整个toolchain,成天没事重装,纯粹误人子弟。
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: 我明知有坑。为什么要改?你爱改那是你的事。
: 我早说了。你说我不知道这个那个。压根无关紧要。
: 是不是要重新build库文件。这没啥神秘的。
: 就算你没看过资料。
: 动动脑子也就能知道。
:
: 所以你还是不知道怎么一行换掉?你不是会吗?
:
: 这样吧,别的都别说了,你先搞出一个link到msvcrxxx的可执行文件再说,崩也
: 号不崩
:
: 也好,都OK。然后我们再继续说这东西能不能用的问题。否则浪费大家的时间没
: 意义。
: ...................

g
guvest

Mingw/lib 有几个.a库是依赖于msvcrt的,这是周知的事实。
我的决定与此事实有关。你把这件事往外generalize没有意义。

同样的事实之下,旁人做别的决定,实属正常。
我无意说服谁。误人子弟从何说起。

再说No drama的做法与小白用户的做法一致。
哪里又会有人学。

【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: 早就没人care你知不知道了,重要的事你觉得你对你不知道的事情有很
strong的
<br>: opinion。
<br>: 比如说,一个lib不对就只能换整个toolchain,成天没事重装,纯粹误人子弟。
<br>

n
netghost

我们还是具体点:mingw的哪个.a在你的情况下是依赖于msvcrt的?

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Mingw/lib 有几个.a库是依赖于msvcrt的,这是周知的事实。
: 我的决定与此事实有关。你把这件事往外generalize没有意义。
: 同样的事实之下,旁人做别的决定,实属正常。
: 我无意说服谁。误人子弟从何说起。
: 再说No drama的做法与小白用户的做法一致。
: 哪里又会有人学。
: <br>: 早就没人care你知不知道了,重要的事你觉得你对你不知道的事情有很: strong的
: <br>: opinion。
: <br>: 比如说,一个lib不对就只能换整个toolchain,成天没事重装,纯粹误人
: ...................

c
chebyshev

这问题不是关于我此刻这3000行能不能Mingw一行搞好。难道我后头就不改此程序了?

这是
根据现有信息,关于这个办法的判断---会不会troublesome,以及解决这问题要花的时间,risk。

也许我的程序改了一遍过呢。那又如何。只要这个逻辑存在,那就是risk。
今天不用___xxx,也许明天用了呢?
我给你具体看一个例子。此类debug过程Mingw用户论坛多的是。

Step 1:
下面这段,作者说__findfirst有问题(他用别的办法修的)。http://lua-users.org/wiki/BuildingModules

Using MinGW to build against LuaBinaries
By default, MinGW builds against the old runtime (msvcrt.dll) but can be
persuaded to link against msvcr80.dll using -lmsvcr80. However, you may have trouble with non-trivial extensions, because the import library supplied
with MinGW has got some import names wrong. For instance, _findfirst is
actually exported as _findfirst32, etc. The solution is straightforward,
although a bit of a hack: link directly against the DLL and rename the
offending functions.

Step 2:
然后去找libmsvcrt有没有(用cygwin或者别的):
nm /mingw/lib/libmsvcrt.a | grep __findnext

即可确认__findfirst在这个.a文件里。
在我的版本是这个文件。

Step 3:
[我没有这个文件,没有做]
nm /mingw/lib/libmsvcrt80.a | grep __findnext
可确认是否__findfirst32在libmsvcrt80这个文件。

这样,你就核实了第一步作者的说法:
__findfirst32(libmsvcrt.a里)和__findfirst(libmsvcrt80.a)冲突。

n
netghost

别去找别人的例子,就是你的,你的问题在哪里?这个非常简单。

你贴的东西,exactly说明一件事,你并没有看懂别人在说什么,虽然你search了一大
堆。要解决这件事,你只能踏踏实实的一步步自己搞明白。

你别和我急,这不是我的问题是你的问题,你不想解决就算了。

【 在 chebyshev (......) 的大作中提到: 】
: 这问题不是关于我此刻这3000行能不能Mingw一行搞好。难道我后头就不改此程序了?
: 这是
: 根据现有信息,关于这个办法的判断---会不会troublesome,以及解决这问题要花的时
: 间,risk。
: 也许我的程序改了一遍过呢。那又如何。只要这个逻辑存在,那就是risk。
: 我给你具体看一个例子。此类debug过程Mingw用户论坛多的是。
: Step 1:
: 下面这段,作者说__findfirst有问题(他用别的办法修的)。
: http://lua-users.org/wiki/BuildingModules
: Using MinGW to build against LuaBinaries
: ...................