2017-11-30 19 views
0

私はCソースファイル(driver.c)を、ダイナミックライブラリ(libhello.so)ファイルを持つmainメソッドでコンパイルしようとしています。 mainメソッドで使用される関数.cソースファイルと.soダイナミックライブラリを一緒にコンパイルする

私はそれは罰金コンパイルし、期待通りのディレクトリにファイルを返す

gcc -shared -o libhello.so -fPIC hello.c 

との.soファイルを作成します。

は、その後、私は

gcc driver.c libhello.so -o driver 

と動的ライブラリlibhello.soとdriver.cファイルをコンパイルしようとそれは文句なしでコンパイルし、私は、実行可能「ドライバ」を実行しようとすると問題が起こります。私はfollwingエラーを取得する:

./driver: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory 

ファイルは、それがでコンパイルされているかのディレクトリで右が文字通りあるので、私は混乱している誰かが私のためにこれを説明できますか?

+1

./libhello.soには、ユーザー定義のライブラリであるため、driver.cでコンパイルしています。 libhello.soを/ libディレクトリにコピーしましたか? – achal

+0

./libhello.cでコンパイルしても問題なく動作しました。ありがとうございました! – Ethan

+0

[共有ライブラリの読み込み中にエラーが発生しました](https://stackoverflow.com/questions/9482984/error-while-loading-shared-libraries) –

答えて

1

実際にはlibhello.soと動的にリンクしません。 -lオプションが必要です。 -lhello lddドライバ(あなたのexec)の依存関係を確認できます。

-1

gcc driver.c libhello.so -o driver 

が正しくありません。それはのようになります。

:もちろん

gcc driver.c -o driver -L. -lhello 

、すべてのプロトタイプを含むヘッダファイルがあるはず、などのヘッダファイルは、一般的に命名されるだろう

libhello.soライブラリ最終コンパイル+リンク声明は次のようになりますのでhello.h::私は、最後の行をmisstateを作っ

gcc driver.c -o driver -I. -L. -lhello <<< edited 

、「 - I」パラメータは、ヘッダファイルのディレクトリをリストする必要がありますヘッダーファイル名ではありません。

+0

これを試しましたか?エラーは消えましたか? –

+0

@ n.m。それを試してみるには、 'driver.c'と' libhello.c'の内容と 'libhello.c'のヘッダファイルの内容を投稿することをお勧めします。 – user3629249

+0

内容は任意でよい。それはまったく無関係です。問題を再現するために必要なすべての情報が問題に存在します。 –

関連する問題