1

重複の可能性:
Linux でのリンカー エラー: 「未定義の参照」</a>

次のような共有ライブラリをリンクします。

core : $(CORE_OBJS) | bin
    $(CC) $(LFLAGS) -o bin/libcbitcoin$(LIBRARY_EXTENSION) $(CORE_OBJS)

これにより、ライブラリ ファイル libcbitcoin.2.0.so が生成されます。

しかし、ライブラリにリンクする実行可能ファイルが作成されると、リンカーは、表示される各シンボルへの未定義の参照があると不平を言います。makefile は、次のように実行可能ファイルをリンクします。

$(TEST_BINARIES): bin/%: build/%.o
    $(CC) -lcbitcoin.$(LIBRARY_VERSION) -lpthread -lcbitcoin-crypto.$(LIBRARY_VERSION) -lcbitcoin-network.$(LIBRARY_VERSION) -lcbitcoin-file-ec.$(LIBRARY_VERSION) -lcbitcoin-storage.$(LIBRARY_VERSION) -lcbitcoin-rand.$(LIBRARY_VERSION) -L/opt/local/lib -levent_core -levent_pthreads -lcrypto -L$(BINDIR) $< -o $@

これにより、リンカー オプションが提供されます-lcbitcoin.2.0

OSXではなくLinux Mint用にビルドしようとしたときにのみ、この問題が発生します。完全なメイクファイルはこちら: https://github.com/MatthewLM/cbitcoin/blob/newNetworkCode/Makefile.in

autoconf ファイルはここにあります (いずれにしても重要な場合): https://github.com/MatthewLM/cbitcoin/blob/newNetworkCode/configure.ac

助けてくれてありがとう。

4

1 に答える 1

6

編集: リンカーの順序。

リンカー行にライブラリ拡張子を指定する必要はありません。だけ-lcbitcoinで十分です。

また、リンカーに渡されるライブラリの順序も重要になる場合があります。予想とは逆の順序です。ライブラリを必要とするオブジェクトを指定した後で、ライブラリを指定する必要があります。参照: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

于 2013-02-02T20:00:37.100 に答える