centos 使用clion调用libpcap 显示pcap_x函数未定义的引用

centos上的clion 调用libpcap 提示


/home/admin/linpcap_pro/test.c:21:对‘pcap_lookupdev’未定义的引用
/home/admin/linpcap_pro/test.c:22:对‘pcap_lookupnet’未定义的引用
/home/admin/linpcap_pro/test.c:23:对‘pcap_open_live’未定义的引用
/home/admin/linpcap_pro/test.c:28:对‘pcap_compile’未定义的引用
/home/admin/linpcap_pro/test.c:33:对‘pcap_setfilter’未定义的引用
/home/admin/linpcap_pro/test.c:34:对‘pcap_loop’未定义的引用
/home/admin/linpcap_pro/test.c:35:对‘pcap_close’未定义的引用


我的cmake文件如下

cmake_minimum_required(VERSION 3.24)
project(linpcap_pro C)

set(CMAKE_C_STANDARD 11)
#声明头文件路径
set(INC_DIR /usr/include)

#声明链接库路径
set(LINK_DIR /usr/lib64)
#引入头文件
include_directories(${INC_DIR})

#引入库文件
link_directories(${LINK_DIR})


add_executable(linpcap_pro main.c)

add_executable(test test.c)

target_link_libraries(linpcap_pro linpcap.so pcap)

目录结构是这样的

img

在外面命令行用 gcc test.c -lpcap 是可以编译的,我的问题就是如何修改cmake文件使我在clion里面就可以直接运行成功

参考GPT和自己的思路:您需要在CMakeLists.txt文件中添加一个target_link_libraries命令来链接libpcap库。此外,您也可以使用find_library命令来查找和链接库文件。

下面是一个示例CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.24)
project(linpcap_pro C)

set(CMAKE_C_STANDARD 11)

# 查找libpcap库
find_library(PCAP_LIBRARY pcap)

# 声明头文件路径
set(INC_DIR /usr/include)

# 引入头文件
include_directories(${INC_DIR})

# 添加可执行文件
add_executable(linpcap_pro main.c)

# 链接libpcap库
target_link_libraries(linpcap_pro ${PCAP_LIBRARY})


在这个示例中,我们使用find_library命令来查找libpcap库,并将其链接到可执行文件中。此外,我们还设置了头文件路径,并使用include_directories命令引入了头文件。

您可以将上述代码添加到您的CMakeLists.txt文件中,并在Clion中重新生成项目。这样,您就应该可以成功编译和运行您的程序了。

参考GPT的回答和自己的思路,修改后的cmake文件如下:

cmake_minimum_required(VERSION 3.24)
project(linpcap_pro C)

set(CMAKE_C_STANDARD 11)

# 声明头文件路径
include_directories(/usr/include)

# 声明链接库路径
link_directories(/usr/lib64)

# 添加 linpcap 库
find_library(LINPCAP_LIB linpcap)

# 添加 pcap 库
find_library(PCAP_LIB pcap)

# 添加可执行文件
add_executable(linpcap_pro main.c)

# 添加测试用例
add_executable(test test.c)

# 链接 linpcap 库和 pcap 库
target_link_libraries(linpcap_pro ${LINPCAP_LIB} ${PCAP_LIB}) 

其中,我使用了 find_library 函数来自动查找 linpcap 和 pcap 库,这可以确保在其他机器上运行代码时也能正常链接库文件。如果需要,可以将 /usr/lib64 和 /usr/include 修改为对应的库和头文件路径。

回答不易,还请采纳!!!

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据你的描述,出现了链接错误,提示找不到libpcap的函数定义。为了解决这个问题,你需要在CMake文件中添加链接库libpcap,以便让编译器正确链接它。

你已经添加了libpcap作为链接库,但你需要将其更改为全名。由于libpcap的共享库文件命名约定为“libpcap.so.x.y.z”(其中x.y.z是版本号),为了使编译器能够正确找到它,你需要将其更改为“-lpcap”:

cmake_minimum_required(VERSION 3.24)
project(linpcap_pro C)

set(CMAKE_C_STANDARD 11)
set(INC_DIR /usr/include)
set(LINK_DIR /usr/lib64)
include_directories(${INC_DIR})
link_directories(${LINK_DIR})

add_executable(linpcap_pro main.c)
target_link_libraries(linpcap_pro -lpcap)

add_executable(test test.c)
target_link_libraries(test -lpcap)

这将在链接库时使用全名“-lpcap”,这应该可以解决你的问题。

如果你仍然无法解决问题,请检查你的libpcap库是否已正确安装,或者考虑在其他位置手动构建它,然后将相关路径添加到CMake列表中。
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^