我正在尝试使用
编译libconfig++版本1.4.8make LDFLAGS='-static-libstdc++ -static-libgcc'
但这似乎不起作用,因为我还在:
$ 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:
/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
虽然最后一个看起来不像:
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
这可能是它的原因,在这种情况下,我将如何解决它?
答案 0 :(得分:1)
似乎libconfig ++ Makefile只是忽略了LDFLAGS,因为我根本没有看到'-static-libstdc ++'。
试试这个:
CXX="g++ -static" make
或者只是在之前放置LDFLAGS ,而不是之后。
答案 1 :(得分:0)
确保链接呼叫中包含$(LD_FLAGS)。
另外,您的链接器可能正在拾取一个动态(* .so)库,该库阻止使用-static-libstdc ++和-static-libgcc。每个调用libgcc和libstdc ++的库都应该静态链接(如果有可用的静态版本)。
答案 2 :(得分:0)
-static-libgcc是GCC选项,而不是链接器选项。把它放在CFLAGS中。