2017-10-27 16 views
0

ライブラリをリンクしようとするとコンパイルエラーが発生します。私のコンパイルコマンドに伴うエラーは次のとおりです。gccを-lと-Lとリンクするライブラリ

gcc snw-server.c -Wall -g -L\ -lpacketErrorSend -o snw-server 
/tmp/cc7dekxv.o: In function `main': 
/home/mike/CSCI446/project3/snw-server.c:113: undefined reference to `packetErrorSend' 
collect2: error: ld returned 1 exit status 
Makefile:5: recipe for target 'file' failed 
make: *** [file] Error 1 

最初に-Lコマンドについて少し混乱しました。ライブラリファイルは、他のすべてのファイルがあるカレントディレクトリにあります。ここに私のディレクトリにあるファイルがあります。

libpacketErrorSend.a Makefile packetErrorSend.h snw-client.c snw-server.c 

、ここでは私のMakefileは私が.cファイルにpacketErrorSend.hを含むことを確認しました

file: snw-server.c snw-client.c 
     gcc snw-server.c -Wall -g -L\ -lpacketErrorSend -o snw-server 
     gcc snw-client.c -Wall -g -L\ -lpacketErrorSend -o snw-client 


    clean: 
     rm -f snw-server snw-client 

次のようになります。私はライブラリを適切にリンクしているかどうかはわかりません。

packetErrorSend関数は、教師がsend(2)(ネットワーク)と同じ引数を使用するように構築されていますが、パケットを失います。これはsendを使って動作しますが、ライブラリをリンクして関数をpacketErrorSendに変更しようとするとコンパイルされません。

おかげで、 マイク

+1

'-L \ -lpacketErrorSend' ??? => '-L。 -lpacketErrorSend' – Stargateur

+1

現在のディレクトリは "\"で示されていません。 " – Scooter

答えて

3

\文字は、それがシェルによってオプションの区切りとして扱われないために発生、次のスペースをexscapes。したがって、-L\ -lpacketErrorSendは単一の引数として終了し、リンカーに "-lpacketErrorSend"でライブラリファイルを探すように指示します。そのディレクトリは存在しないので、効果的に何もしません。次に、-lオプションがないため、ライブラリはリンクされません。カレントディレクトリ -

あなたはおそらくしたいことは.に見えるようにリンカに指示します

.を使用して
gcc snw-server.c -Wall -g -L. -lpacketErrorSend -o snw-server 

です。

+0

ああ、ありがとう、ありがとう – Mike1982

関連する問題