1

LLVM を使用して ac プログラムをコンパイルしようとしていますが、いくつかの静的ライブラリを含めるのに問題があります。LLVM を使用してこれらの静的ライブラリを正常にコンパイルしました。たとえば、ogg.l.bc と同様に libogg.a が存在します。

しかし、最終的なプログラムをビルドしようとすると、静的な ogg ライブラリが含まれていません。私はさまざまなコンパイラオプションを試しましたが、最も注目すべきものは次のとおりです。

gcc oggvorbis.c -O3 -Wall -I$OV_DIR/include -l$OV_DIR/lib/libogg.a -l$OV_DIR/lib/libvorbis.a -o test.exe

これにより、次の出力が得られます (簡潔にするためにディレクトリは短縮されています)。

$OV_DIR/include/vorbis/vorbisfile.h:75: warning: ‘OV_CALLBACKS_DEFAULT’ defined but not used
$OV_DIR/include/vorbis/vorbisfile.h:82: warning: ‘OV_CALLBACKS_NOCLOSE’ defined but not used
$OV_DIR/include/vorbis/vorbisfile.h:89: warning: ‘OV_CALLBACKS_STREAMONLY’ defined but not used
$OV_DIR/include/vorbis/vorbisfile.h:96: warning: ‘OV_CALLBACKS_STREAMONLY_NOCLOSE’ defined but not used
llvm-ld: warning: Cannot find library '$OV_DIR/lib/ogg.l.bc'
llvm-ld: warning: Cannot find library '$OV_DIR/lib/vorbis.l.bc'
WARNING: While resolving call to function 'main' arguments were dropped!

vorbis.l.bc と同様に $OV_DIR/lib/ogg.l.bc が存在し、誰でも (それらを含むディレクトリと同様に) 読み取り可能であるため、これは困惑しています。

私が間違っていることを誰かが知っていますか?

ありがとう、

マット

4

2 に答える 2

3

unwind が言ったように、 -l の後にライブラリ名が続きます。

たとえば、Linux ライブラリの命名規則では、ライブラリの名前が libogg の場合、

-logg は、ライブラリー・ディレクトリー内で *最も一致するものを見つけて選択します。

ディレクトリをリストに追加できます。

  1. -L オプションは、次のフォルダをリストに一時的に追加する方法の 1 つです。
  2. 環境変数 LD_LIBRARY_PATH も、ほとんどの Linux/Unix > で GNU ツールのリストに影響します。

gcc は、要求されたライブラリ名と名前が一致する静的ライブラリ ファイルと共有ライブラリ ファイルの両方を見つけることができます。

例えば、

libogg.a libogg.so

そのため、gcc オプション -static があります。

-static
動的リンクをサポートするシステムでは、これにより共有ライブラリとのリンクが防止されます。他のシステムでは、このオプションは効果がありません。

共有または静的ライブラリ ファイルを直接、オブジェクト ファイルとして使用する場合は、次のようにオプションなしでパスを指定します。

gcc oggvorbis.c the_path/libogg.a
于 2010-04-06T10:16:08.387 に答える
0

-l オプションがパスを期待しているとは思わない。それらを分割し、-Lオプションを使用してパスを設定し、単純なライブラリ名を-l次のように使用する必要があります。

$ gcc oggvorbis.c -O3 -Wall -I$OV_DIR/include -L$OV_DIR/lib -logg -lvorbis -o test.exe

また、このように使用する場合、ライブラリ名の「lib」と「.a」の部分を含めないことに注意してください。

于 2010-04-06T09:41:43.613 に答える