use*_*580 2 c ubuntu linker-errors pcap
我正在尝试编译这个名为Pirni的C程序,它最初是为iPhone制作的,我想在Linux Ubuntu 12.04 LTS上运行它.它很短,(3个C文件和1个头文件).但我得到以下错误.我确实libpcap-dev安装了,但我确实包含了-lpcap所以我不知道可能出现什么问题.
gcc -Wall -pthread -lpcap pirni.c threads.c sniffer.c -o pirni -lnet
pirni.c: In function ‘set_forwarding’:
pirni.c:31:2: warning: implicit declaration of function ‘sysctlbyname’ [-Wimplicit-function-declaration]
/tmp/cc3sf284.o: In function `set_forwarding':
pirni.c:(.text+0xfd): undefined reference to `sysctlbyname'
/tmp/ccvGjyMo.o: In function `processPacket':
sniffer.c:(.text+0x1b): undefined reference to `pcap_dump'
/tmp/ccvGjyMo.o: In function `initSniffer':
sniffer.c:(.text+0xfa): undefined reference to `pcap_open_live'
sniffer.c:(.text+0x15a): undefined reference to `pcap_lookupnet'
sniffer.c:(.text+0x1af): undefined reference to `pcap_compile'
sniffer.c:(.text+0x1dd): undefined reference to `pcap_setfilter'
sniffer.c:(.text+0x222): undefined reference to `pcap_dump_open'
sniffer.c:(.text+0x27c): undefined reference to `pcap_loop'
collect2: ld returned 1 exit status
make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)
gcc -Wall -pthread -lpcap pirni.c threads.c sniffer.c -o pirni -lnet
^^^^^^
Run Code Online (Sandbox Code Playgroud)
将它移到最后,所以链接器知道它应该链接哪些符号.
对于它在命令行中的库,链接器看到它到目前为止它不需要任何符号libpcap,因此忽略它.
说这个:
gcc -Wall -pthread pirni.c threads.c sniffer.c -o pirni -lnet -lpcap
# ^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
图书馆需要在当地翻译单位之后列出.您的ld手册将详细告诉您原因(它与搜索和插入缺失符号的方式有关).
| 归档时间: |
|
| 查看次数: |
7594 次 |
| 最近记录: |