15

問題なく共有ライブラリを作成できます。libcbitcoin.so (エラーなし) を作成し、実行可能ファイルと OpenSSL ライブラリを使用してリンクを試みます。私はこのコマンドを使用します:

gcc -L/media/sf_BitEagle_Projects/cbitcoin/build/bin -lcbitcoin \
-Wl-rpath,/media/sf_BitEagle_Projects/cbitcoin/build/bin -lssl -lcrypto \
-L/usr/local/ssl/lib/ -o /media/sf_BitEagle_Projects/cbitcoin/build/bin/testCBAddress \
/media/sf_BitEagle_Projects/cbitcoin/build/obj/testCBAddress.o \
/media/sf_BitEagle_Projects/cbitcoin/build/obj/CBOpenSSLCrypto.o

bin ディレクトリは、ライブラリの場所です。obj ディレクトリには、実行可能ファイルにリンクしたいオブジェクト ファイルがあります。コマンドでは、-L、-l、および -rpath オプションを使用します。これは、Linux でのリンクに必要なすべてであると考えました。次のようなエラーが発生するため、間違っているようです。

/media/sf_BitEagle_Projects/cbitcoin/test/testCBAddress.c:40:
undefined reference to `CBNewByteArrayFromString'

CBNewByteArrayFromString はライブラリにあります。なぜかリンクされていません。OpenSSL も:

/media/sf_BitEagle_Projects/cbitcoin/dependencies/crypto/CBOpenSSLCrypto.c:37:
undefined reference to `SHA1'

リンクを機能させるにはどうすればよいですか?

GCC バージョン: gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Linux Mint 13 の場合

ありがとうございました。

4

2 に答える 2

32

リンク コマンド ラインのオブジェクト ファイルの後にライブラリを配置します。

gcc /media/sf_BitEagle_Projects/cbitcoin/build/obj/testCBAddress.o \
    /media/sf_BitEagle_Projects/cbitcoin/build/obj/CBOpenSSLCrypto.o \
    -L/media/sf_BitEagle_Projects/cbitcoin/build/bin \
    -lcbitcoin -Wl-rpath,/media/sf_BitEagle_Projects/cbitcoin/build/bin \
    -L/usr/local/ssl/lib/ -lssl -lcrypto \
    -o /media/sf_BitEagle_Projects/cbitcoin/build/bin/testCBAddress

そうしないと、リンカーは、ライブラリをスキャンするリンクの段階で、特定のライブラリから何も必要ないと判断する可能性があります。オブジェクトファイル。オブジェクト ファイルを最初に配置すると、この問題は発生しません。

于 2012-09-05T00:04:04.933 に答える
1

シンボルが見つからないことが原因だと思います.gccは最初に左から通過し、最後にlibファイルを配置しようとします

于 2012-09-05T01:41:14.277 に答える