linux(CENTOS 6.4)で、命名規約が lib で始まらない so のリンクで困ってます。
ld -share -L /XXXXXX -lfoo -o bar.so (各種オブジェクト)
(foo.so というso が/XXXXXX にある。)
とすると、必ず cannot find -lfoo になります。
foo100.so は元々 dlopen でロードするために作られたライブラリ(C++)で
名称がlibから始まらないのですが、foo.so内部の C++ のクラスを
継承したクラスを含む bar.so を作るため、リンクが必要になりました。
foo.so を libfoo.so に名称変更すればリンクできるのですが、命名は
規約で決まっています。そのままの名称を指定する手段は
ないのでしょうか?
ld -share -o bar.so /XXXXXX/foo.so (各種オブジェクト)
とすればリンクは通りますが、bar.so の中に /XXXXXX/foo.so というパスが
埋め込まれるため、foo.so を /XXXXXX に置かないと動かなくなってしまいます。
以上です。、どなたかご回答をよろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ld(1)のマニュアルを見る限り-l:foo.soでいけそうですが、gccがldにそのコマンドを渡してくれない場合は-Wl,-l:foo.soでやるしかないでしょうね。
参考までに
http://linux.die.net/man/1/ld
| -l namespec
| --library=namespec
(snip)
| If namespec is of the form :filename, ld will search the library path
| for a file called filename, otherwise it will search the library path for
| a file called libnamespec.a.
http://linux.die.net/man/1/gcc
|-Wl,option
| Pass option as an option to the linker.
この回答への補足
ありがとうございます。早速やってみて、確かにリンクはできるのですが、
埋め込まれた so の情報に ディレクトリ情報もくっついてしまいます。
つまり、 -l を用いずに、引数として so のパスを指定したのと同じ結果になりました。
ld -shared -o bar.so -L../foo -l:foo.so ・・・・・・・
[readelf で bar.so の Dynamic section のダンプ]
Dynamic section at offset 0x678 contains 14 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [../foo/foo.so]
これですと、実行ファイルと foo.so の位置関係が固定されてしまうようです。
../foo/ の部分を埋め込まないようにする方法はないでしょうか?
Linuxカテで解決しました。
こちらにも解決策を載せておきます。
■予め foo.so に soname を付ける
ld -shared -o foo.so -soname foo.so ・・・・・・・
■リンクする
ld -shared -o bar.so -L../foo -l:foo.so ・・・・・・・
これだけでした。こうすると、bar.so がロードするライブラリ名称は
foo.so になります。../foo/foo.so にはなりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Makefileのechoの展開について 2 2022/07/26 07:35
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- Bluetooth・テザリング android(Galaxy S-22)、bluetoothの「この端末名」がコロコロ変わる 1 2022/12/17 13:15
- 物理学 単位変換?次元解析?について質問です 1 2022/04/10 21:31
- 友達・仲間 彼氏持ちの女子と下校した 1 2022/12/14 22:09
- アンテナ・ケーブル ニコンのデジカメの映像出力ピン端子→ 外部入力S映像に入れるケーブルを探しています。 2 2023/03/11 20:30
- Excel(エクセル) Excelの質問です。 重複なしの部署一覧の表を作り、各部署のセル横に各部署の社員番号をすべて抜き出 3 2023/04/26 18:14
- 数学 ラプラス変換について 3 2022/10/13 22:18
- 友達・仲間 彼氏持ちの女子と下校したことが… 1 2022/12/13 20:44
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
vb.net オブジェクト指向につい...
-
Excelで =EMBED("Acrobat Docu...
-
error C2712: オブジェクト ア...
-
ビジュアルC++でボタンの有...
-
プリコンパイルされたSQL文を取...
-
多人数のじゃんけんプログラム
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
JSPのout.printについて
-
Listに格納されているオブジェ...
-
空の文字列とnullと""
-
ADO オブジェクトの渡し方
-
VBA 同じ名前のオブジェクトを...
-
VBからBATファイルを起動して戻...
-
ワイルドカード<?>と型パラメー...
-
COMコンポーネントって何?
-
戻り値がクラスオブジェクト
-
エプソンVP-930のESC/Pの操作に...
-
Date型オブジェクトから日付の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
ワイルドカード<?>と型パラメー...
-
EXCEL VBAにて動的にCheckBOXを...
-
VBAのWindowオブジェクトとWork...
-
C#でフォームのオブジェクト名...
-
LISTBOXの内容が更新されま...
-
Object型からDouble型へのキャスト
-
JAVAからHTMLへ値を返す方法
-
COMコンポーネントって何?
-
ビジュアルC++でボタンの有...
-
戻り値がクラスオブジェクト
-
VBA 同じ名前のオブジェクトを...
-
ASP.net 教えてください!!(...
-
Vbで通常使用するプリンターを...
-
newは明示的にした方が良いのか?
-
CoCreateInstanceでエラーになる。
-
オブジェクトレベルとメタレベル
-
bmp画像をjpegやpng画像に圧縮...
-
Accessの連結・非連結オブジェ...
おすすめ情報