[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

於是便找到了這個動態鏈接庫的路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章