2016-10-10 11 views
1

似たような話題がありますが、私はそれらの答えを見つけることができませんでした。g ++ ld共有ライブラリのエラー:code:blocks

私はcode :: blocks IDEを使用してテストコンソールアプリケーションを構築しています。 HD Homerun DVBチューナー用のlibhdhomerun.so(Silicon Dust製)というDVB共有ライブラリーをロードする必要があります。 ./configure、...、sudo make install、ldconfigなどを使用してHDHRチューナーライブラリーをインストールしており、それらはすべてユーティリティー(同時にビルド)で動作します。だから、図書館はそこにあり、OKです。

ライブラリは/ usr/local/libにインストールされています。実際には他の共有ライブラリと同じようにシンボリックリンクはありませんが、最後にバージョン情報もありません。私は(明示的/usr/local/lib/libhdhomerun.so含めた)コードをビルドする

、LDステージは

"cannot find -lhdhomerun.so" 

で失敗のI /(は/ usr/localなどのあらゆる組み合わせを試してみましたlib /)libhdhomerun.so、hdhomerun.so、libhdhomerun、hdhomerun、それへのシンボリックリンクを作成するなど何も違いはありません。

奇妙なことは、まったく同じ方法でudev、mysql、libdvbv5の共有ライブラリを持っていることです。リンクしない唯一のものはhdhomerunです。

"ld -lhdhomerun.so --verbose"というコマンドラインから手作業で冗長リンクを実行すると、libhdhomerun.so.soが見つかるため、失敗します。

感謝の意を表す提案はありますが、私はcode :: blocksを使い続ける必要があります。

+0

'lib'なしで、拡張子なしで、例えば'-lhdhomerun'です。 「通常の」ライブラリではなく、「通常の」ライブラリの場所にプラグインを示すことの多いバージョンはありません。 –

答えて

0

ライブラリーを正しくリンクするには、ご使用の環境でライブラリー・パスを定義し、-lフラグを付けて適切なライブラリー名を使用する必要があります。ライブラリパスはLD_LIBRARY_PATH環境変数で定義されています。 g++-lフラグについては、ライブラリの拡張を提供すべきではない - あなたはすでに観察されたように、あなたのケースで、それはこのようにする必要がありますので:あなたはすでに `-l`ディレクティブは、ライブラリ名をとり発見してきたように

-lhdhomerun 
+0

ありがとうございます。上記の実験を数多く行ったところ、元の設定で作業を開始したばかりです。混乱している。 – nmw01223