• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:共有ライブラリ作成時の -L)

共有ライブラリの作成時に発生したエラーと解決方法

このQ&Aのポイント
  • 共有ライブラリを作成する際にシンボリックリンクを省略する方法とは?
  • エラーの原因はgccのオプションの使い方が誤っていたことである。
  • gccのオプションを正しく設定することで問題を解決できる。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.3

ライブラリの探索パスは、コンパイル時と実行時で違うからです。 -Lはあくまでコンパイル時の探索パスを指定するオプションです。 実行時の探索パスを設定する場合は-Wl,-rpathを使用します。 gcc -o main main.c -L/root/libsub1.so -L/root/libsub2.so -Wl,-rpath,/root -Wl,-rpathを設定せずにコンパイルされた実行ファイル(main)をとりあえず動かすには、 export LD_LIBRARY_PATH=/root としてから、lddすれば「not found」は無くなり、実行もできるはずです。 他にも、ld.so.confに/rootを追加してldconfigコマンドを実行する方法もあるのですが、 テスト目的以外ではお勧めしません。 詳細はNo.1様が張られたリンク先を参照されるのがよいと思います。

noname#182748
質問者

お礼

解答ありがとうございます。 助かりました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

マニュアルを読んで -L の意味が分かれば疑問は氷解するはず.

noname#182748
質問者

お礼

解答ありがとうございます。 助かりました。

回答No.1

-Lついては http://okwave.jp/qa/q2006656.html のANo.2を参照。 上記の回答にもあるが、-Lだけでは、実行時にlibsub1.so、libsub2.soを探せずにエラーになるので、ANo.2の「4つの方法」のどれか1つを用いて解決する事。 あと、main関数でprint()を呼び出す前に void print(void); と、関数プロトタイプ宣言をしておく事。

noname#182748
質問者

お礼

解答ありがとうございます。 助かりました。

関連するQ&A