对于共享库中的符号,"未定义引用"

Mat*_*ell 1 c linux gcc shared-libraries ld

可能重复:
Linux上的链接器错误:"未定义引用"

我将这样的共享库链接在一起:

core : $(CORE_OBJS) | bin
    $(CC) $(LFLAGS) -o bin/libcbitcoin$(LIBRARY_EXTENSION) $(CORE_OBJS)
Run Code Online (Sandbox Code Playgroud)

其中生成库文件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 $@
Run Code Online (Sandbox Code Playgroud)

这给出了链接器选项-lcbitcoin.2.0.

当我尝试为Linux Mint而不是OSX构建时,我只会遇到此问题.完整的makefile在这里:https://github.com/MatthewLM/cbitcoin/blob/newNetworkCode/Makefile.in

autoconf文件在这里(如果在任何情况下它很重要):https://github.com/MatthewLM/cbitcoin/blob/newNetworkCode/configure.ac

谢谢你的帮助.

she*_*heu 6

编辑:链接器排序.

您不必为链接器行指定库扩展.只需一个即可-lcbitcoin.

此外,传递给链接器的库的顺序可能很重要.顺序与您可能期望的相反 - 您应指定需要它的对象指定库.请参阅:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html