gcc链接库与-l和-L

时间:2017-10-27 23:54:25

标签: c gcc network-programming

我在尝试链接库时遇到了编译错误。这是错误以及我的编译命令

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看起来像

 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

我确保在.c文件中包含了packetErrorSend.h。我不确定我是否正确地链接了这个库。

packetErrorSend函数由我们的讲师构建,使用与send(2)(网络)相同的参数,但它会丢失数据包。它使用send工作,但在尝试链接库并将函数更改为packetErrorSend时不编译。

谢谢, 迈克

1 个答案:

答案 0 :(得分:3)

\字符超出以下空格,导致shell不将其视为选项分隔符。所以-L\ -lpacketErrorSend最后作为一个参数,告诉链接器查看" -lpacketErrorSend"用于库文件。由于该目录不存在,它实际上什么都不做。然后,由于您没有-l选项,因此没有链接库。

你可能想要的是

gcc snw-server.c -Wall -g  -L. -lpacketErrorSend -o snw-server

使用.告诉链接器查看. - 当前目录。