2017-04-25 3 views
1

私はいくつかの静的ライブラリ(BoostとOpenSSL)に依存するUbuntu 14.04.5で動的ライブラリを構築しています。UbuntuのライブラリをArchのプロジェクトで使ってビルドしていません。

このライブラリを別のUbuntuマシンのプロジェクトで使用すると、完全に動作します。私はそれを構築し、アーチ・マシン(Antergos)上のプロジェクトでそれを使用する場合は、それは、ビルドプロセス中に、次の言葉:

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 

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)を使用して、リンク先をいつでも指定できます。

関連する問題