在Windows 7 64bit中,我使用的是MinGW-w64(来自MinGW-build项目,由NiXman提供)。具体来说,我正在使用x64-4.8.0-release-win32-sjlj-rev2.7z
。 x64 =开发机器。 Win32 =线程模型。这可以编译32位和64位目标。
当我编译并清空cpp文件时只有一个普通的cp main和一个printf行说你好...我是否将它编译为32位或64位之间存在不一致。
g++ -m32 test.cpp
依赖关系是:
g++ -m64 test.cpp
依赖项仅限于:
当我在64位模式下编译时,我不明白LIBGCC_S_SJLJ-1
和LIBSTDC++-6
依赖项的情况。 64位C ++编译不需要这两件事吗?或者它们是否自动静态链接?
如果他们自动链接到一个而不是另一个,这是什么原因?
我知道我可以将LIBGCC
和LIBSTDC++
静态链接到-static-libgcc
和-static-libstdc++
的32位项目。虽然我不确定这是不是很好的做法。
我尝试了-shared-libgcc
和-shared-libstdc++
,这样我的64位编译就会对LIBGCC
和LIBSTDC++
产生动态依赖,但g ++在使用{{{}}时拒绝动态链接这些1}}标志(编译为64位)。
我已经读过,静态链接–m64
和LIBGCC
是件坏事,并且它会阻止人们安全地链接到其他第三方动态库中(因为某些东西)了解索赔)。
如果有人能够阐明这种g ++行为的差异以及这方面的最佳做法,我真的很感激。
答案 0 :(得分:1)
阅读此http://sourceforge.net/apps/trac/mingw-w64/wiki/Native%20Win64%20compiler向我建议本机编译器已使用--disable-shared标志构建,并且依赖关系静态链接到您的应用程序。他们肯定是必需的。
LIBGCC_S_SJLJ-1.DLL是处理异常所必需的,而LIBSTDC ++ - 6.DLL是C ++标准库。
我不清楚为什么会出现32/64的差异。可能是因为后端是用不同的标志生成的。
我没有看到静态链接这些依赖关系的真正问题,事实上,关于64位做出了决定。我会对32位做同样的事情。