我可能会做一些隐含的假设。如果有任何错误,请纠正我。
Win32,TDM GCC 4.6.1,Codeblocks 10.05,Codeblocks能够使用gnu工具链编译C ++。
据我所知,也可以动态和静态地链接stdlibc ++。目前CodeBlocks链接libstdc ++ 静态。虽然我在代码块“构建设置”面板中找不到与动态/静态链接相关的任何设置,但我可以使用进程监视器验证它是否静态链接c ++标准库。
CodeBlocks使用以下参数执行g ++:
mingw32-g++.exe -o bin\Release\fltk-hello.exe
obj\Release\fltk-hello.o -s C:\MinGW32\lib\libfltk.a
C:\MinGW32\lib\libgdi32.a C:\MinGW32\lib\libole32.a
C:\MinGW32\lib\libuuid.a C:\MinGW32\lib\libcomdlg32.a
C:\MinGW32\lib\libcomctl32.a
然后,有一个来自g ++的调用:
"c:/mingw32/bin/../libexec/gcc/mingw32/4.6.1/collect2.exe"
"-Bdynamic" "-o" "bin\Release\fltk-hello.exe" "-s"
"c:/mingw32/bin/../lib/gcc/mingw32/4.6.1/../../../crt2.o"
"c:/mingw32/bin/../lib/gcc/mingw32/4.6.1/crtbegin.o"
"-Lc:/mingw32/bin/../lib/gcc/mingw32/4.6.1"
"-Lc:/mingw32/bin/../lib/gcc"
"-Lc:/mingw32/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib"
"-Lc:/mingw32/bin/../lib/gcc/mingw32/4.6.1/../../.."
"obj\Release\fltk-hello.o" "C:\MinGW32\lib\libfltk.a"
"C:\MinGW32\lib\libgdi32.a" "C:\MinGW32\lib\libole32.a"
"C:\MinGW32\lib\libuuid.a" "C:\MinGW32\lib\libcomdlg32.a"
"C:\MinGW32\lib\libcomctl32.a" "-Bstatic" "-lstdc++" "-Bdynamic"
"-lmingw32" "-lgcc" "-lmoldname" "-lmingwex" "-lmsvcrt" "-ladvapi32"
"-lshell32" "-luser32" "-lkernel32" "-lmingw32" "-lgcc" "-lmoldname"
"-lmingwex" "-lmsvcrt"
"c:/mingw32/bin/../lib/gcc/mingw32/4.6.1/crtend.o"
现在,这部分
"-Bstatic" "-lstdc++"
清楚地表明,stdc ++是静态链接的。我还可以在进程资源管理器中验证加载的dll不包含libstdc ++ - 6.dll。
我查看了codeblocks构建设置页面,但一无所获。 Codeblock提供了向g ++添加参数的可能性。不幸的是我找不到明确的gcc参数来打开libstdc ++的动态链接,http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html的文档说
如果libstdc ++可用作共享库,则可以使用-static选项 如果未使用,则链接到libstdc ++的共享版本。
那么,如何将其动态链接到stdc ++?
答案 0 :(得分:1)
最后,我找到了一个解决方案。一个人必须添加
-shared-libstdc++
到链接器选项。现在它动态地链接stdc ++ libs。