在我的 Ubuntu 上安装 libpcap 时出现链接 pcap.p
Issues Linking pcap.p when libpcap is installed on my Ubuntu
我找到了一个方便的 packet capture program in C 并在我家的 Ubuntu 盒子上编译它。原始代码的顶部是这样的:
#include <pcap/pcap.h>
但是当我编译的时候,我看到了这个:
root@ubuntu:/home/me# gcc -Wall packetCap.c
/tmp/cc2kDt1M.o: In function `main':
packetCap.c:(.text+0x33): undefined reference to `pcap_lookupdev'
packetCap.c:(.text+0xa0): undefined reference to `pcap_open_live'
packetCap.c:(.text+0xef): undefined reference to `pcap_next'
collect2: error: ld returned 1 exit status
root@ubuntu:/home/me#
好像代码看不到pcap.h。我进行了搜索,在 /usr/include/pcap/
中找到了 pcap.h 的完整版本,然后将我的代码更改为:
//#include <pcap/pcap.h> // if this gives you an error try pcap/pcap.h
#include "/usr/include/pcap/pcap.h"
但我仍然遇到完全相同的编译错误。
有人看到我做错了什么吗?我查看了之前的 Whosebug 帖子,这里有一些我用来排除早期 SO 指南的基本技巧:
首先,编译时指定目录没有效果:
root@ubuntu:/home/me# gcc -I/usr/include/pcap -Wall packetCap.c
/tmp/cc2kDt1M.o: In function `main':
packetCap.c:(.text+0x33): undefined reference to `pcap_lookupdev'
packetCap.c:(.text+0xa0): undefined reference to `pcap_open_live'
packetCap.c:(.text+0xef): undefined reference to `pcap_next'
collect2: error: ld returned 1 exit status
root@ubuntu:/home/me#
我grep了/usr/include/pcap/pcap.h
,貌似我需要的功能在:
root@ubuntu:/home/me# more /usr/include/pcap/pcap.h | grep pcap_lookupdev
PCAP_API char *pcap_lookupdev(char *);
root@ubuntu:/home/me# more /usr/include/pcap/pcap.h | grep pcap_open_live
char *name; /* name to hand to "pcap_open_live()" */
PCAP_API pcap_t *pcap_open_live(const char *, int, int, int, char *);
root@ubuntu:/home/me# more /usr/include/pcap/pcap.h | grep pcap_next
PCAP_API const u_char *pcap_next(pcap_t *, struct pcap_pkthdr *);
PCAP_API int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
root@ubuntu:/home/me#
而且我确实安装了 libpcap:
root@ubuntu:/home/me# apt-get install libpcap-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libpcap-dev is already the newest version (1.7.4-2ubuntu0.1).
The following packages were automatically installed and are no longer required:
libjline-java libnetty-3.9-java libpython-all-dev libpython3-dev libpython3.5-dev libzookeeper-java python-all python-all-dev python-pip-whl python-wheel python3-dev python3-wheel python3.5-dev zookeeper
Use 'apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 442 not upgraded.
root@ubuntu:/home/me#
我是否必须在我的代码停止处执行 #define PCAP_API
或其他操作?谁能发现我做错了什么?谢谢。
您在 link 命令中缺少 pcap 库。了解 pcap 包含 link 的路径和库的最佳方法是使用 pcap-config
工具。
$ pcap-config --cflags
-I/usr/include
$ pcap-config --libs
-lpcap
在编译命令中,可以使用:
gcc -Wall -Wextra $(pcap-config --cflags) packetCap.c $(pcap-config --libs)
我找到了一个方便的 packet capture program in C 并在我家的 Ubuntu 盒子上编译它。原始代码的顶部是这样的:
#include <pcap/pcap.h>
但是当我编译的时候,我看到了这个:
root@ubuntu:/home/me# gcc -Wall packetCap.c
/tmp/cc2kDt1M.o: In function `main':
packetCap.c:(.text+0x33): undefined reference to `pcap_lookupdev'
packetCap.c:(.text+0xa0): undefined reference to `pcap_open_live'
packetCap.c:(.text+0xef): undefined reference to `pcap_next'
collect2: error: ld returned 1 exit status
root@ubuntu:/home/me#
好像代码看不到pcap.h。我进行了搜索,在 /usr/include/pcap/
中找到了 pcap.h 的完整版本,然后将我的代码更改为:
//#include <pcap/pcap.h> // if this gives you an error try pcap/pcap.h
#include "/usr/include/pcap/pcap.h"
但我仍然遇到完全相同的编译错误。
有人看到我做错了什么吗?我查看了之前的 Whosebug 帖子,这里有一些我用来排除早期 SO 指南的基本技巧:
首先,编译时指定目录没有效果:
root@ubuntu:/home/me# gcc -I/usr/include/pcap -Wall packetCap.c
/tmp/cc2kDt1M.o: In function `main':
packetCap.c:(.text+0x33): undefined reference to `pcap_lookupdev'
packetCap.c:(.text+0xa0): undefined reference to `pcap_open_live'
packetCap.c:(.text+0xef): undefined reference to `pcap_next'
collect2: error: ld returned 1 exit status
root@ubuntu:/home/me#
我grep了/usr/include/pcap/pcap.h
,貌似我需要的功能在:
root@ubuntu:/home/me# more /usr/include/pcap/pcap.h | grep pcap_lookupdev
PCAP_API char *pcap_lookupdev(char *);
root@ubuntu:/home/me# more /usr/include/pcap/pcap.h | grep pcap_open_live
char *name; /* name to hand to "pcap_open_live()" */
PCAP_API pcap_t *pcap_open_live(const char *, int, int, int, char *);
root@ubuntu:/home/me# more /usr/include/pcap/pcap.h | grep pcap_next
PCAP_API const u_char *pcap_next(pcap_t *, struct pcap_pkthdr *);
PCAP_API int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **);
root@ubuntu:/home/me#
而且我确实安装了 libpcap:
root@ubuntu:/home/me# apt-get install libpcap-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libpcap-dev is already the newest version (1.7.4-2ubuntu0.1).
The following packages were automatically installed and are no longer required:
libjline-java libnetty-3.9-java libpython-all-dev libpython3-dev libpython3.5-dev libzookeeper-java python-all python-all-dev python-pip-whl python-wheel python3-dev python3-wheel python3.5-dev zookeeper
Use 'apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 442 not upgraded.
root@ubuntu:/home/me#
我是否必须在我的代码停止处执行 #define PCAP_API
或其他操作?谁能发现我做错了什么?谢谢。
您在 link 命令中缺少 pcap 库。了解 pcap 包含 link 的路径和库的最佳方法是使用 pcap-config
工具。
$ pcap-config --cflags
-I/usr/include
$ pcap-config --libs
-lpcap
在编译命令中,可以使用:
gcc -Wall -Wextra $(pcap-config --cflags) packetCap.c $(pcap-config --libs)