
表題の件に関して質問させていただきます。
たとえば/usr/libにある;libA.soをリンクしたい時、gccでは
gcc -lA
としますが、libA.so.1,libA.so.2‥と複数バージョンがある場合、バージョンまで指定してコンパイルすることは可能でしょうか?
サーバー権限を持っていないので、シンボリックリンクを張り直すという手は使えません。
また、自分のアカウントで同共有ライブラリを用意したのですが、/usr/libが優先されてしまい、自分のアカウントのライブラリを設定することは出来ません。
解決法をご存知の方、ご教授お願い致します。
No.2ベストアンサー
- 回答日時:
通常ライブラリをインストールすると
libA.so (libA.so.1.0.2へのシンボリックリンク)
libA.so.1 (libA.so.1.0.2へのシンボリックリンク)
libA.so.1.0.2
という3つのファイルが存在すると思います。
libA.so.1.0.2はライブラリの実体、libA.so.1 は実行時に参照される
ライブラリ、libA.soはコンパイル時に指定されるライブラリです。
もし、さらにlibA.so.2.0.2が存在する場合、
こんな感じになっていると思います。
libA.so (libA.so.1.0.2へのシンボリックリンク)
libA.so.1 (libA.so.1.0.2へのシンボリックリンク)
libA.so.1.0.2
libA.so.2 (libA.so.2.0.2へのシンボリックリンク)
libA.so.2.0.2
この状態で gcc -lAとすると、その実体は libA.so.1.0.2で、そこに書かれて
いるsoname (ライブラリにハードコードされています) によって実行時に
はlibA.so.1を見るようになります。
そこで、libA.soのリンク先を libA.so.2.0.2 に変更してあげます。
# ln -sf libA.so.2.0.2 /usr/lib/libA.so
そして、gcc -lAとすると実体は libA.so.2.0.2なので、実行時にlibA.so.2
を見るようにすることができます。
もし、libA.so.1とlibA.so.2が別のディレクトリにインストールされている場合
は先に検索したいディレクトリを -L オプションで指定すればよいです。
libA.so.1 が /opt/lib1/lib、libA.so.2 が /opt/lib2/libに存在する場合、
gcc -L/opt/lib2/lib -lA -Wl,-rpath,/opt/lib2/lib
で libA.so.2 を、
gcc -L/opt/lib1/lib -lA -Wl,-rpath,/opt/lib1/lib
で libA.so.1 を指定できます。
大変参考になりました。ありがとうございます。
シンボリックリンクを作成したいディレクトリが管理者権限でないと編集できない場合は、
・自分のディレクトリにシンボリックリンクを作成
・後者の方法でディレクトリを指定してリンクさせる
という二段階を踏めばよろしいのでしょうか?
No.3
- 回答日時:
> ・自分のディレクトリにシンボリックリンクを作成
> ・後者の方法でディレクトリを指定してリンクさせる
> という二段階を踏めばよろしいのでしょうか?
その方法で大丈夫です。libA.soのシンボリックリンクを
/home/hogehoge/libに作成するとすれば、
ln -s /opt/lib1/lib/libA.so.1.0.2 /home/hogehoge/lib/libA.so
gcc -L/home/hogehoge/lib -lA -Wl,-rpath,/opt/lib1/lib
ln -s /opt/lib2/lib/libA.so.2.0.2 /home/hogehoge/lib/libA.so
gcc -L/home/hogehoge/lib -lA -Wl,-rpath,/opt/lib2/lib
とすることで異なるバージョンのライブラリとリンクできると思います。
rpathは実行時パスなので /home/hogehoge/lib とはせず、
実行時に参照されるライブラリが存在するlibA.so.1 もしくは
libA.so.2 が存在するディレクトリを指定します。
もし、libA.so.1 もしくは libA.so.2 が /lib もしくは /usr/lib
に存在する場合、rpath は必要ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VS2008 C++】2つのプロジェ...
-
C/C++の.libについて教えてくだ...
-
fatal error LNK1104: ファイル...
-
C++Builder リンカエラーとは?
-
「MFCを使用しない」から「MFC...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
Excelのエラーで困ってます。
-
VBAを何回も作り直して、容量が...
-
” OS ビルド ” の意味が分か...
-
デバッグとビルドは何が違うの...
-
DLL参照時に指定されたモジュー...
-
C++のhppファイルをCでinclude
-
ビルドとリビルドの違いを教え...
-
アプリケーションのDLLファイル...
-
プレコンパイルの意味を教えて...
-
エクセルVBAではRound...
-
VB6のデバッガ?強制終了?につ...
-
ASP.NETのDLL入れ替えについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スタティックライブラリの使い方
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
【VS2008 C++】2つのプロジェ...
-
インポートライブラリ(.lib)フ...
-
VS2010にて、依存関係とビルド順
-
VC++でビルド時の、リンク警告 ...
-
'd3dx9.lib' が開けません。
-
C++Builder リンカエラーとは?
-
visual studio community2017 O...
-
静的/動的リンクライブラリにつ...
-
スタティックリンクライブラリ...
-
exeファイルはどのdllを参照す...
-
ターボCのライブラリ追加方法
-
MinGWでOpenMPを使いたいのです...
-
VC++6.0からVC++.NET2005へ移植
-
ライブラリのリンクについて
-
VB6/SPREAD6.0 について
-
「MFCを使用しない」から「MFC...
-
error LNK2019: 未解決の外部シ...
おすすめ情報