1

libconfig++バージョン 1.4.8をコンパイルしようとしています

make 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 ファイルの最後から 2 番目のコンパイル手順に 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

これが原因である可能性があります。その場合、どのように修正/回避しますか?

4

3 に答える 3

1

「-static-libstdc++」がまったく検出されていないため、libconfig++ Makefile は単純に LDFLAGS を無視しているようです。

これを試して:

CXX="g++ -static" make

または、LDFLAGS をmake の後ではなく、 make の前に置くだけです。

于 2012-11-21T20:18:22.503 に答える
0

リンク呼び出しに $(LD_FLAGS) が含まれていることを確認してください。

ちなみに、リンカーは、-static-libstdc++ と -static-libgcc の使用を妨げる動的 (*.so) ライブラリを選択している可能性があります。libgcc および libstdc++ を呼び出すすべてのライブラリは、静的にリンクする必要があります (もちろん、利用可能な静的バージョンがある場合)。

于 2013-08-16T00:12:39.520 に答える