首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态链接整个程序

问静态链接整个程序
EN

Stack Overflow用户
提问于 2013-11-28 01:24:21
回答 2查看 545关注 0票数 3

我有一个从Windows移植到Linux的c++应用程序,一切正常,但是...我们客户在Debian3.1 (sarge)上运行的应用程序,我不能在目标系统上强制使用gcc版本,我更喜欢使用新的gcc (有一些c++11构造,我想保留它们)。我想使现在可执行的测试和.so文件在未来。

我决定静态地编译我的连接。

当我运行时:

代码语言:javascript
复制
g++ -static -o prog obj/sublib1/file1.o obj/sublib1/file2.o obj/sublib2/file1.o obj/sublib2/file2.o (...) -L../somedir -s -lsomestaticlib

我得到一个错误:

代码语言:javascript
复制
/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:

代码语言:javascript
复制
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构建它,但当出现问题时,我已经转移到了终端)

我需要安装这些库的静态版本吗?多么?

EN

回答 2

Stack Overflow用户

发布于 2013-11-28 01:34:04

如果您使用的是最新版本的g++,则选项-static-libstdc++应该就是您需要的全部。这将确保g++库是静态链接的,而系统库(通常没有静态版本)是动态链接的。(在这种情况下,不要使用-static。)

票数 0
EN

Stack Overflow用户

发布于 2013-11-28 02:39:51

您需要安装glibc-devel-static包,但如果适用,@jameskanze是更好的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20249073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档