2013-02-02 32 views
1

可能重复:
Linker error on Linux: “undefined reference to”“未定义提到” 为符号在一个共享库

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

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 [email protected] 

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

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

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

感谢您的帮助。

+0

我知道我之前解决了这个问题,但我无法找到。所以是的,这是重复的。 :-( –

回答

6

编辑:链接器排序。

您不必为链接器行指定库扩展名。只要-lcbitcoin就足够了。

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

+1

“你应该在指定需要它的对象之后指定一个库”,它总是这样容易的!另外,如果你有两个依赖于彼此的lib,我必须这样做--lliba - llibb -lliba – Cruel

相关问题