问题描述
项目工程源码在进行编译时,出现了“/usr/bin/ld: cannot find -lpcap”的错误,具体如下所示:
# make
……
/usr/bin/ld: cannot find -lpcap
collect2: error: ld returned 1 exit status
Makefile:10: recipe for target 'tx-temp' failed
make: *** [tx-temp] Error 1
解决方法
通过执行“sudo apt install libpcap-dev”下载libpcap.so库即可解决该问题。如下所示:
# sudo apt install libpcap-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libpcap0.8 libpcap0.8-dev
The following NEW packages will be installed:
libpcap-dev libpcap0.8-dev
The following packages will be upgraded:
libpcap0.8
1 upgraded, 2 newly installed, 0 to remove and 284 not upgraded.
Need to get 339 kB of archives.
After this operation, 750 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpcap0.8 amd64 1.8.1-6ubuntu1.18.04.2 [118 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpcap0.8-dev amd64 1.8.1-6ubuntu1.18.04.2 [218 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpcap-dev amd64 1.8.1-6ubuntu1.18.04.2 [3,480 B]
Fetched 339 kB in 2s (173 kB/s)
(Reading database ... 110400 files and directories currently installed.)
Preparing to unpack .../libpcap0.8_1.8.1-6ubuntu1.18.04.2_amd64.deb ...
Unpacking libpcap0.8:amd64 (1.8.1-6ubuntu1.18.04.2) over (1.8.1-6ubuntu1) ...
Selecting previously unselected package libpcap0.8-dev:amd64.
Preparing to unpack .../libpcap0.8-dev_1.8.1-6ubuntu1.18.04.2_amd64.deb ...
Unpacking libpcap0.8-dev:amd64 (1.8.1-6ubuntu1.18.04.2) ...
Selecting previously unselected package libpcap-dev:amd64.
Preparing to unpack .../libpcap-dev_1.8.1-6ubuntu1.18.04.2_amd64.deb ...
Unpacking libpcap-dev:amd64 (1.8.1-6ubuntu1.18.04.2) ...
Setting up libpcap0.8:amd64 (1.8.1-6ubuntu1.18.04.2) ...
Setting up libpcap0.8-dev:amd64 (1.8.1-6ubuntu1.18.04.2) ...
Setting up libpcap-dev:amd64 (1.8.1-6ubuntu1.18.04.2) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
再次编译,此问题不再出现,说明问题已得到解决。
推而广之
将此问题一般化,可以得出以下广义解决方法,也可以说是技巧:
在Linux下编译时,如果遇到“/usr/bin/ld: cannot find -lxxx”(其中,-lxxx表示链接库文件 libxxx.so)的错误,则说明是编译过程找不到对应的库文件。
一般出现这种错误有以下几种原因:
- 系统缺乏对应的库文件;
- 版本不对应;
- 库文件的链接错误;
- 库文件路径设置问题。
对于前两种情况,可以通过下载安装相应的lib来解决。命令为:
sudo apt install libxxx-dev
以上边笔者遇到的实际问题为例:提示找不到“-lpcap”,则说明找不到“libpcap.so”,需要下载安装“libpcap-dev”来解决。而下载了“libpcap-dev”之后问题确实迎刃而解了。
以后再遇到此类问题,就用这种一般化方法,对于大多数情况应该都是行之有效的。