2017-11-05 12 views
0

私が見てきた多くの以下の参考文献は: command to compile c files with .a files単純なC++ファイルを.aファイルでコンパイルしますか?

私がコンパイルしようとしている.cppファイルを持っています。私はこれに加えて.hファイルと2 .aファイルを持っています。

g++ 1_SDKinfo.cpp -L. -l l* -o a.out -v 

g++ 1_SDKinfo.cpp -L ../Lib/mac32_64 -lR3DSDK -lR3dSDKllvm -o a.out -v 

私はこれの多くの亜種を試してみましたが、ファイルの

ld: library not found for -llibR3DSDK.a 

clang: error: linker command failed with exit code 1 (use -v to see invocation) 

ディレクトリ
1_SDKinfo.cpp  R3DSDKDecoder.h  R3DSDKOpenCL.h  REDCuda.dylib  REDR3D.dylib 
R3DSDK.h  R3DSDKDefinitions.h R3DSDKRocket.h  REDDecoder.dylib libR3DSDK.a 
R3DSDKCuda.h  R3DSDKMetadata.h R3DSDKStream.h  REDOpenCL.dylib  libR3DSDKllvm.a 

のようなエラーを得続けるましどうまさに私はこれをコンパイルすることが出来るのですか? 編集:Mac OSの

+0

大文字小文字の区別があるファイルシステムの場合、 '-lR3dSDKllvm'は大文字と小文字が異なるため、' libR3DSDKllvm.a'が見つかりません。 '-lR3DSDKllvm'が必要です – Galik

答えて

0

あなたがリンクしたいすべてのライブラリのまあ最初は、現在のディレクトリにある(それはそう)ので、あなたはライブラリ検索にカレントディレクトリを追加するには、-Lに引数として.を使用する必要がありますパス。

第2の問題は、ライブラリ名がではなく、で、ファイル名と同じです。 libR3DSDK.aという名前のファイルの場合、ライブラリ名R3DSDKです。リンカーは接頭辞libと接尾辞.aを自動的に追加します。

だからあなたのコマンドが最初のコマンドはどこそれを見つけるためにライブラリ、およびパスに名前を付けるために-L-lオプションを使用しています

g++ 1_SDKinfo.cpp -L. -lR3DSDK -o a.out -v 

それとも

g++ 1_SDKinfo.cpp libR3DSDK.a -o a.out -v 

ようにする必要があります。 2番目のコマンドは特別なオプションを使用せず、ファイルとリンクしてください。

+0

アーキテクチャがx86_64の場合、シンボルが見つからないと思われます。x86_64 –

+0

@RyanHackこれは別の問題のもう一つの問題です(これは[この質問](http: /stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix))おそらく、あなたがいくつかのライブラリとリンクするのを忘れたということです。 –

関連する問題