[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
於是便找到了這個動態鏈接庫的路徑。