2016-10-25 12 views
0

コマンド実行構築する:
g++ -I../include/redis -L../lib/redis redis.cpp -o redis -lhiredisgccで自分のライブラリにリンクするには?

説明:
私は../lib/redis/libhiredis.soを持っています。そして/usr/local/lib/hiredis13/で、このlibhiredis.solibhiredis.so.0.13 .Then I ldd redisへのシンボルリンクで、ここでの結果はlibhiredis.solibhiredis.so.0.13あります

linux-vdso.so.1 => (0x00007ffd227f7000) 
libhiredis.so.0.13 => not found 
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f7ebca0d000) 
libm.so.6 => /lib64/libm.so.6 (0x00007f7ebc70b000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f7ebc4f5000) 
libc.so.6 => /lib64/libc.so.6 (0x00007f7ebc132000) 
/lib64/ld-linux-x86-64.so.2 (0x00007f7ebcd23000) 

GCCは、../lib/redis/libhiredis.soにリンクする必要があり、私は右ですか?

+0

は '' ../ libに/ Redisの/中libhiredis.so'は '記号リンクではありません。 – CharlesLiuChina

+0

適切な 'soname'を使ってライブラリをビルドする必要があります。 –

+0

@GundolfGundelfingerありがとう。私は 'libhiredis.so'を' libhiredis.so.0.13'に改名し、 'libhiredis.so'を' libhiredis.so.0.13'のシンボルリンクにしました。 :-) – CharlesLiuChina

答えて

3

おそらくライブラリにSONAMElibhiredis.so.0.13)があるので、プログラムはファイルの名前の代わりにそれを記録します。その後、実行時には、通常のディレクトリでそのSONAMEが検索されます。

あなたのライブラリが/usr/local/lib/hiredis13/であり、それは通常のディレクトリではありません。解決策は、次のいずれかです。

  • /etc/ld.so.conf/etc/ld.so.conf.d/*と再実行ldconfig/usr/local/lib/hiredis13ディレクトリを追加します。
  • プログラム実行時に環境変数LD_LIBRARY_PATH=/usr/local/lib/hiredis13をエクスポートします。
  • リンカーオプション-rpathを使用してください。
+0

'-rpath'方法は、良い選択です他の人には 'LD_LIBRARY_PATH'が好きです。 –

+0

を変更、更新/変更から、それは免疫作る実行可能ファイル内のライブラリパスを埋め込みますよう – CharlesLiuChina

+0

@ DavidC.Rankin:個人的には、 'LD_LIBRARY_PATH'とそれをエクスポートしてバイナリを起動するシェルスクリプトが好きです。 – rodrigo

関連する問題