1

libmxml.soに依存するsoをリンクしています。ただし、libmxml.so をインストールする権利はありません。

それが私がやっていることです

gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o -L ../../../../system/addonlibs/ -lmxml -lpthread

ldd が表示します

ldd ServiceProvider.so 
    libmxml.so.1 => not found
    libpthread.so.0 => /lib/libpthread.so.0 (0x40026000)
    libc.so.6 => /lib/libc.so.6 (0x40046000)

2回目の試みは

gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o ../../../../system/addonlibs/libmxml.so -lpthread

それでもlddは私を示しています

ldd ServiceProvider.so 
    libmxml.so.1 => not found
    libpthread.so.0 => /lib/libpthread.so.0 (0x40026000)
    libc.so.6 => /lib/libc.so.6 (0x40046000)

その結果、「libmxml.so」しかなく、「libmxml.so.1」がないため、ldd はライブラリを見つけられません。この「.1」サフィックスを取り除くにはどうすればよいですか? なぜそれが来るのですか?

4

1 に答える 1

0

動的ライブラリとリンクするときは、次のことを行うべきではありません:

gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o ../../../../system/addonlibs/libmxml.so -lpthread

代わりに、/yourpath/system/addonlibs(相対パスではなく完全パスを使用する必要があります) が you にあることを確認してくださいLIBRARY_PATH。次に、リンク コマンドを変更します。

export LIBRARY_PATH=/yourpath/system/addonlibs:$LIBRARY_PATH
gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o -lmxml -lpthread

次のように書くこともできます。

gcc -shared -m32 -o ServiceProvider.so ServiceProvider.o -L/yourpath/system/addonlibs -lmxml -lpthread

ただし、プログラムを実行するには、ライブラリ パスが にある必要がありますLD_LIBRARY_PATH

などに問題がある場合は、.so の名前.so.so.1.so.1 に変更し、 から.so.1へのシンボリック リンクを作成し.soます。

編集:

そうすれば、objdump -p libmxml.so | grep SONAMEおそらくlibmxml.so.1. ここでlibmxml.so.1識別子を取得します。

于 2013-06-14T07:59:04.267 に答える