2013-02-02 61 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

相關問題