
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
多人数のじゃんけんプログラム
-
Object型からDouble型へのキャスト
-
オブジェクト配列の各メンバを...
-
パワーポイントのVBAでテキスト...
-
写真が合成か調べる方法
-
JSPのスレッドセーフについて
-
オブジェクトレベルとメタレベル
-
サーブレットのクラス図について。
-
中学のクラス数
-
「タイプ初期化子が例外をスロ...
-
0歳児の指しゃぶりに関して
-
インスタンス参照でアクセスで...
-
河合塾
-
VBスクリプトでテキストファイ...
-
javascriptからjavaを呼び出したい
-
エクセルVBAで、条件に一致する...
-
進学校通ってたんですけど、眼...
-
canvasで表示されてる画像を1...
-
河合塾のクラス分けについて
-
ヒグマを撃退
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
VBA 同じ名前のオブジェクトを...
-
Excelで =EMBED("Acrobat Docu...
-
COMコンポーネントって何?
-
VBAのWindowオブジェクトとWork...
-
ワイルドカード<?>と型パラメー...
-
error C2712: オブジェクト ア...
-
Object型からDouble型へのキャスト
-
C#でフォームのオブジェクト名...
-
質問すいません。 javascriptの...
-
EXCEL VBAにて動的にCheckBOXを...
-
ASP.net 教えてください!!(...
-
オブジェクトレベルとメタレベル
-
0 == False はいいけど
-
ActiveDirectoryのユーザ情報の...
-
Accessの連結・非連結オブジェ...
-
Vbで通常使用するプリンターを...
-
ビジュアルC++でボタンの有...
-
LISTBOXの内容が更新されま...
-
サーブレットのクラス図について。
おすすめ情報