我有一个从Windows移植到Linux的c ++应用程序,一切正常,但...... 我们的客户在Debian 3.1上运行的应用程序(sarge),我不能强制gcc版本在目标系统上,我更喜欢使用新的gcc(有一些c ++ 11结构,我想保留)。我想在将来为测试和.so文件制作可执行文件。
我决定静态编译我的procect。
我跑的时候:
g++ -static -o prog obj/sublib1/file1.o obj/sublib1/file2.o obj/sublib2/file1.o obj/sublib2/file2.o (...) -L../somedir -s -lsomestaticlib
我得到了错误:
/usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lm
/usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lc
系统是OpenSuse 13.1 32bit,uname -a:
Linux linux-zfaz.site 3.11.6-4-desktop #1 SMP PREEMPT Wed Oct 30 18:04:56 UTC 2013 (e6d4a27) i686 i686 i386 GNU/Linux
问题可能在于数学库和C库。两个库的动态版本都在/ lib目录中。
(可能没关系:我正在尝试使用代码:: blocks来构建它,但是当问题发生时我已经转移到终端)
我是否需要安装这些库的静态版本?怎么样?
答案 0 :(得分:0)
如果您使用的是最新版本的g ++,那么您应该选择-static-libstdc++
选项。这将确保g ++库静态链接,但系统库(通常没有静态版本)是动态链接的。 (在这种情况下,请勿使用-static
。)
答案 1 :(得分:0)
您需要安装glibc-devel-static
套餐,但如果适用,@ jameskanze的答案是更好的选择。