gpt4 book ai didi

c++ - CMAKE 链接器没有找到库;但是使用 find_library 找到了库

转载 作者:行者123 更新时间:2023-11-28 04:29:40 25 4
gpt4 key购买 nike

我有一个名为 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 中有一个库。您知道在哪里查看并且可以在文件浏览器中看到它,但链接器找不到它,因为它只在“/link”中查找。

'find_package' 查找包并设置一些变量,但它不会更改链接器路径。

您必须自己设置链接器路径。在大多数情况下,find_package 设置一个包含链接器路径的变量。

find_package 提供了一些类似catkin_package() 的函数。这些函数设置您的构建环境。

catkin_package() is a catkin-provided CMake macro. This is required to specify catkin-specific information to the build system which in turn is used to generate pkg-config and CMake files.

This function must be called before declaring any targets with add_library() or add_executable().

关于c++ - CMAKE 链接器没有找到库;但是使用 find_library 找到了库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53282269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com