首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用- libconfig++ -libgcc和-static-libstdc++编译静态

使用- libconfig++ -libgcc和-static-libstdc++编译静态
EN

Stack Overflow用户
提问于 2012-11-01 08:42:51
回答 3查看 5.3K关注 0票数 1

我正在尝试使用编译libconfig++版本1.4.8

代码语言:javascript
运行
复制
make LDFLAGS='-static-libstdc++ -static-libgcc'

但这似乎不起作用,因为我仍然得到:

代码语言:javascript
运行
复制
$ readelf -d lib/.libs/libconfig++.so | grep NEEDED
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]

我注意到so文件的倒数第二个编译步骤包含我的LDFLAGS:

代码语言:javascript
运行
复制
/bin/bash ../libtool --tag=CXX   --mode=link g++  -g -O2 -Wall -Wshadow -Wextra -Wno-unused-parameter -version-info 10:3:1 -no-undefined -static-libgc
c -o libconfig++.la -rpath /usr/local/lib libconfig___la-libconfig.lo libconfig___la-scanner.lo libconfig___la-grammar.lo libconfig___la-scanctx.lo li
bconfig___la-strbuf.lo libconfig___la-libconfigcpp.lo

而最后一个看起来不是这样:

代码语言:javascript
运行
复制
libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.7
/crtbeginS.o  .libs/libconfig___la-libconfig.o .libs/libconfig___la-scanner.o .libs/libconfig___la-grammar.o .libs/libconfig___la-scanctx.o .libs/libc
onfig___la-strbuf.o .libs/libconfig___la-libconfigcpp.o   -L/usr/lib/gcc/x86_64-linux-gnu/4.7 -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x86_64-linu
x-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/l
ib/gcc/x86_64-linux-gnu/4.7/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/4.7/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../x
86_64-linux-gnu/crtn.o  -O2   -Wl,-soname -Wl,libconfig++.so.9 -o .libs/libconfig++.so.9.1.3

这可能是它的原因吗?在这种情况下,我该如何修复/解决它?

EN

回答 3

Stack Overflow用户

发布于 2012-11-22 04:18:23

看起来静态生成文件完全忽略了LDFLAGS,因为我根本没有看到‘- libconfig++ -libstdc++’被选中。

试试这个:

代码语言:javascript
运行
复制
CXX="g++ -static" make

或者只是把LDFLAGS放在make之前,而不是放在它之后。

票数 1
EN

Stack Overflow用户

发布于 2017-10-18 05:17:53

-static-libgcc是GCC选项,不是链接器选项。把它放在CFLAGS中。

票数 1
EN

Stack Overflow用户

发布于 2013-08-16 08:12:40

确保您的链接调用中包含$(LD_FLAGS)。

另外,您的链接器可能会选择一个动态(*.so)库,从而防止使用-static-libstdc++和-static-libgcc。调用libgcc和libstdc++的每个库都应该静态链接(当然,如果有静态版本的话)。

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

https://stackoverflow.com/questions/13169461

复制
相关文章

相似问题

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