[CMake] 寻找一个动态链接库的所在路径

[CMake] 寻找一个链接库的所在路径

背景(可跳过)

由于之前犯病安装DOCA,导致我在编译DPDK时出现如下报错:

fatal error: rxp-compiler.h: No such file or directory

这个rxp-compiler库并不是安装DPDK所必须的库,我用的集群中的其它机器就是没有这个库的。如果上网搜索或者查找源码的话,可以找到下面的代码:

#ifdef REE_COMPILER_SDK
#include <rxp-compiler.h>
...

而这个REE_COMPILER_SDK是由下面的代码提供的

lib = cc.find_library('librxp_compiler', required: false)
if lib.found()
	ext_deps += lib
	ext_deps += cc.find_library('libstdc++', required: true)
	cflags += ['-DREE_COMPILER_SDK']
endif

meson setup build的输出中查找rxp,可以找到这样一行:

Library librxp_compiler found: YES

而对于其他的机器,这行应该是NO。

因此我们可以分析出原因:之前安装DOCA的时候,可能是安装了rxp_compiler这个库。后来卸载DOCA时,rxp_compiler这个库并没有完全卸载。导致我在安装DPDK时,meson脚本找到了这个库,以为我们有对这个库的支持,所以就启用了相关功能的编译。但在ninja编译时,找不到rxp_compiler库,所以报错。

所以我们要做的时找到rxp_compiler这个库的所在位置,然后将它删掉。

方法(正文)

借助CMake的find_library即可。

例如,我们想要查找librxp_compiler这个库。那么我们新建一个空文件夹,然后在里面创建一个CMakeLists.txt,写入下面的内容:

find_library(RES rxp_compiler)
message(${RES})

然后cd到这个文件夹,输入cmake .查看输出。

/usr/lib/x86_64-linux-gnu/librxp_compiler.so

于是便找到了这个动态链接库的路径。

posted @ 2023-04-27 21:52  CQzhangyu  阅读(325)  评论(0编辑  收藏  举报