2011-07-27 17 views
0

私は自分のコードで関数regcomp()を使用しています。私のコードはlibonig.soだけでなくlibc.so.6とリンクしています。 これらのライブラリはどちらも独自のregcomp()の実装を持っていますが、libonig.soの実装を使用したいと思います。しかし、私のコードは常にlibc.so.6の実装を使用します。次のようにLDDの出力がある -リンクエラー - 異なる共有ライブラリ内の同じシンボル

linux-vdso.so.1 => (0x00007fffa03ff000) 
    libonig.so.2 => /usr/local/lib/libonig.so.2 (0x00007f5cb2fbf000) 
    libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00007f12a43cf000) 
    libm.so.6 => /lib64/libm.so.6 (0x00007f12a414c000) 
    libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f12a3f36000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f12a3be1000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003421c00000) 

libtest.so

LDD私はlibonig.soまたはlibc.so.6とのいずれかを変更することは許されないのです。 libcomig.soからregcomp()を使うべきかどうかをリンカに指定する方法はありますか?

答えて

0

ただこの問題を解決しました。私は実際にdlopen()を使って共有オブジェクト(libtest.so)をロードしていました。だから私は、libtest.soをロードしていたバイナリにlibonig.soをリンクさせるべきだった。

一方、私はlibonig.soをlibtest.soにリンクしようとしていました。しかし、バイナリが実行されると、libc.so.6からregcomp()のバージョンが取得され、libonig.soでシンボルを解決する必要はないと考えられました。 libonig.soをリンクし、そのパスをLD_LIBRARY_PATHに含めて問題を解決しました。

関連する問題