簡體   English   中英

CMAKE鏈接器找不到庫; 但是使用find_library找到了庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM