Mingw构建 - 依赖于DLL不是Windows的原生

时间:2011-06-09 19:40:14

标签: c++ build shared-libraries mingw

我正在使用MinGW(GCC 4.5.0)编译我的库以作为共享库导出。我这样做是通过使用MAKE命令编译所有源文件,类似于:

gcc -shared -c mysource.cpp -o mysource.o

最后:

gcc -shared -lstdc++ -lm -lws2_32 mysource.o -o mylib.dll

当我对输出文件进行依赖性遍历时(例如使用http://www.dependencywalker.com/),我发现有3个依赖项:

KERNEL32.dll
MSVCRT.dll
LIBSTDC++-6.DLL

让我的DLL依赖于不附带Windows的文件对于我的最终目标来说是次优的。

有没有办法设置我的系统,以便最终输出(DLL) ONLY 取决于 KERNEL32 MSVCRT ?< / p>

3 个答案:

答案 0 :(得分:7)

-static标志可能正是您要找的。 (在同一行上同时使用-static-shared对我来说仍然很有趣,但它们不是对立的。)

如果您使用g++作为驱动程序而不是gcc,则可以使用-static-libstdc++标记。

答案 1 :(得分:1)

嗯,这正是你告诉你的链接器使用-lstdc++做的...也许在<{em> -shared之前移动该参数并再次链接。据我所知,应该使用C ++标准库的静态版本。

注意:我认为有一个很好的理由更喜欢g ++用于C ++目标而不是使用gcc。可能是关于包含C ++标准库。不记得它从我的头顶。此外,我不知道MinGW在这种情况下是否有所不同。

答案 2 :(得分:0)

我相信正确的答案是“否”。回答此问题的其他人尚未尝试解决您的问题。我很高兴向我展示我的错,但是我对此进行了详尽的研究,至少MINGWCYGWIN环境似乎都需要使用Windows特定的动态链接库(dll)进行分发。

对于Cygwin64,我使用带有以下标志的“ g ++”进行编译:

FFLAGS = -g -Wunused-variable -static -static-libgcc -static-libstdc++

,但是可执行文件仍然需要使用"cygwin1.dll"进行分发-我非常同意这是次优的,并且我不了解该限制。我在MINGW中发现了类似的问题。