我在尝试链接库时遇到了编译错误。这是错误以及我的编译命令
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时不编译。
谢谢, 迈克
答案 0 :(得分:3)
\
字符超出以下空格,导致shell不将其视为选项分隔符。所以-L\ -lpacketErrorSend
最后作为一个参数,告诉链接器查看" -lpacketErrorSend
"用于库文件。由于该目录不存在,它实际上什么都不做。然后,由于您没有-l
选项,因此没有链接库。
你可能想要的是
gcc snw-server.c -Wall -g -L. -lpacketErrorSend -o snw-server
使用.
告诉链接器查看.
- 当前目录。