[英]CMAKE linker does not find library; but library is found with find_library
我在名稱mylib下有一個catkin庫,我使用catkin build
了該庫。此外,我還有一個節點,使用該庫中的函數。 我通常像在節點的CMakeLists.txt中那樣啟用此鏈接:
find_package(catkin REQUIRED COMPONENTS
mylib
)
add_executable(exec
src/main.cpp
)
target_link_libraries(exec
${catkin_LIBRARIES}
)
但是,這次沒有成功。 然后我添加了鏈接器錯誤:
find_package(catkin REQUIRED COMPONENTS
mylib
)
find_library( MYLIB NAMES
mylib
)
message(${MYLIB})
add_executable(exec
src/main.cpp
)
add_dependencies(exec ${MYLIB})
target_link_libraries(exec
${catkin_LIBRARIES}
${MYLIB}
)
問題是message()語句顯示了庫的正確路徑,在這里我也可以在資源管理器中找到它。 但是我得到警告:
(add_dependencies): Policy CMP0046 is not set: Error on non-existent dependency in add_dependencies.
它指的是庫的完全相同的路徑,並且說它不存在。
鏈接器錯誤是
/usr/bin/ld: cannot find -lmylib
備注:我可以通過手動將路徑添加到庫來解決錯誤
link_directories($ENV{HOME}/test/devel/lib)
我不明白為什么首先找到該庫,但是無法將其作為包名稱鏈接。 但是它通過提供完整路徑來起作用。 我感謝任何見識!
該庫不在您的鏈接器路徑中。 例如,您的鏈接器在/link
查找,並且在/home
有一個lib。 您知道在哪里可以看到,並且可以在文件瀏覽器中看到它,但鏈接器找不到它,因為它僅在'/ link'中出現。
'find_package'查找軟件包並設置一些變量,但它不會更改鏈接器路徑。
您必須自己設置鏈接器路徑。 在大多數情況下, find_package
設置一個包含鏈接器路徑的變量。
find_package
提供一些功能,例如catkin_package()
。 這些功能設置您的構建環境。
catkin_package()是catkin提供的CMake宏。 這是向構建系統指定特定於catkin的信息所必需的,而構建系統又用於生成pkg-config和CMake文件。
在使用add_library()或add_executable()聲明任何目標之前,必須先調用此函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.