我有一个从Windows移植到Linux的c++应用程序,一切正常,但是...我们客户在Debian3.1 (sarge)上运行的应用程序,我不能在目标系统上强制使用gcc版本,我更喜欢使用新的gcc (有一些c++11构造,我想保留它们)。我想使现在可执行的测试和.so文件在未来。
我决定静态地编译我的连接。
当我运行时:
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 32位,未命名-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目录中。
(可能无关紧要:我试图使用code::block构建它,但当出现问题时,我已经转移到了终端)
我需要安装这些库的静态版本吗?多么?
发布于 2013-11-28 01:34:04
如果您使用的是最新版本的g++,则选项-static-libstdc++应该就是您需要的全部。这将确保g++库是静态链接的,而系统库(通常没有静态版本)是动态链接的。(在这种情况下,不要使用-static。)
发布于 2013-11-28 02:39:51
您需要安装glibc-devel-static包,但如果适用,@jameskanze是更好的选择。
https://stackoverflow.com/questions/20249073
复制相似问题