2017-04-25 64 views
1

我在Ubuntu 14.04.5上構建了一個動態庫,該庫依賴於一些靜態庫(Boost和OpenSSL)。在Ubuntu上構建庫,在Arch上的項目中使用它 - 不會構建

如果我在另一臺Ubuntu機器的項目中使用這個庫,它可以很好地工作。我建設我的項目有以下

main.cpp.o: In function `init()': 
main.cpp:(.text+0xf8): undefined reference to `Util::generateString[abi:cxx11](int)' 

g++ -Ldeps -Ideps/include main.cpp -lmylib 
但是,如果我構建它,並在拱機(Antergos)在項目中使用它,它在生成過程以下稱

deps包含libmylib.so和deps/include中所需的頭文件。

如果我在我的Ubuntu上運行mylib.so LDD ,我得到如下:

linux-vdso.so.1 => (0x00007ffdd24cf000) 
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f10b2f97000) 
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10b2c91000) 
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f10b2a73000) 
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10b26ab000) 
/lib64/ld-linux-x86-64.so.2 (0x00007f10b3ff3000) 

如果我對Antergos mylib.so運行LDD,我得到如下:

linux-vdso.so.1 (0x00007ffcce115000) 
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f5a42fef000) 
libm.so.6 => /usr/lib/libm.so.6 (0x00007f5a42cdc000) 
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f5a42abe000) 
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5a4271a000) 
/usr/lib64/ld-linux-x86-64.so.2 (0x000055ced49a7000) 

我可能錯過了一些簡單的東西,但我似乎無法讓它工作。我究竟做錯了什麼?

回答

1

我假設Util::generateString[abi:cxx11](int)是由libmylib.so庫導出的函數嗎?如果是這樣,您可能需要先重新編譯該庫,然後重新嘗試main.cpp的編譯/鏈接。

我建議這樣做以確保每個組件鏈接的C++標準庫是相同的版本。它看起來像libmylib.so是針對C++ 11標準庫編譯的,您需要確保main.cpp匹配它。您始終可以使用--std=選項(例如--std=c++11,--std=c++0x,--std=c++17)指定要鏈接哪一個。