3

LSB AppCheckerを使用して共有オブジェクト(.so)の移植性をチェックしています。
報告されている問題の1つは、使用されていないがとにかくリンクされている外部ライブラリ(libm.so.6)が1つあることです。

GCCがこの不要なライブラリにリンクするのを防ぐにはどうすればよいですか?

編集:
私の共有オブジェクトに対するlddコマンドの出力は次のとおりです。

    linux-gate.so.1 =>  (0x009ff000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x003dc000)
    libm.so.6 => /lib/libm.so.6 (0x00110000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00137000)
    libc.so.6 => /lib/libc.so.6 (0x0021d000)
    /lib/ld-linux.so.2 (0x0097f000)
4

2 に答える 2

4

リンカコマンドラインの一部として、-Wl、-as-needed引数を渡します。これにより、実際にシンボルを使用していない直接のライブラリ依存関係が自動的に削除されます。

$ g++ -o test test.cpp -lm; readelf -d test|grep '(NEEDED)'
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
$ g++ -o test test.cpp -lm -Wl,-as-needed; readelf -d test|grep '(NEEDED)'                                                                    
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
于 2009-05-09T04:45:58.477 に答える
-1

独自のリンクコマンドで-lmを指定していない限り、使用している別のライブラリはおそらく数学ライブラリに依存しています。この質問がc++とタグ付けされているという事実から判断すると、おそらくlibstdc ++とのリンクの副作用としてそれを取得しており、できることはあまりありません。

% ldd /usr/lib/libstdc++.so.6                                                                                      
        linux-gate.so.1 =>  (0x4001e000)
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x40127000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x4014d000)
        /lib/ld-linux.so.2 (0x40000000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x402b1000)
于 2009-05-09T04:24:05.847 に答える