- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力将 Assimp 库与 CMake 的 find_package() 函数链接起来。
# ASSIMP search path
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${CMAKE_CURRENT_LIST_DIR}/assimp/)
find_package(assimp REQUIRED)
if (assimp_FOUND)
link_directories(${ASSIMP_LIBRARY_DIRS})
include_directories(${ASSIMP_INCLUDE_DIRS})
target_link_libraries (NervousEngine ${ASSIMP_LIBRARIES})
endif(assimp_FOUND)
我的第一个问题是为什么 Cmake 在使用 gcc 编译项目时没有抛出 find_package() 错误,它说找不到 -lassimp 。当然,当我删除 assimp 目录的 CMAKE_PREFIX_PATH 时,我可能会失败。不知何故,CMake 无法指示编译命令链接它???
第二个问题是为什么库无法链接。这是编译命令以及 ld 链接错误
/usr/bin/c++ -std=gnu++11 -g sourceFiles... o NervousEngine -Wl,-rpath,/home/jointts/CLionProjects/OpenGL/lib/bullet/lib ../lib/bullet/lib/libBulletDynamics.so ../lib/bullet/lib/libBulletCollision.so ../lib/bullet/lib/libLinearMath.so ../lib/bullet/lib/libBulletSoftBody.so -lassimp -lfreetype
/usr/bin/ld: cannot find -lassimp
collect2: error: ld returned 1 exit status
我只是不明白为什么它没有正确链接,我什至使用 link_directories 指令来指导库搜索。
调试库的路径我得到以下内容
message(${ASSIMP_LIBRARY_DIRS}) -> /home/jointts/CLionProjects/OpenGL/lib/assimp/lib
message(${ASSIMP_LIBRARIES}) -> assimp
所以我认为图书馆位置本身是正确的,这会导致我在下面输入的图书馆搜索?
${ASSIMP_LIBRARY_DIRS} + ${ASSIMP_LIBRARIES}
/home/jointts/CLionProjects/OpenGL/lib/assimp/lib/libassimp.so
gcc --version 产生以下内容
gcc(Ubuntu 5.4.0-6ubuntu1~16.04.4)5.4.0 20160609
CMake版本为3.9.6
最佳答案
1: CMake
不会抛出错误,因为它找到了包。您通过成功验证 ASSIMP_*
的值确认了这一点。 -变量。这些变量由 assimp-config.cmake
初始化。 .
2:链接器收到此标志 -lassimp
,这要求链接器知道在哪里寻找库。由于它没有安装在标准位置,因此会失败。在评论中我们讨论了link_libraries()
必须在创建依赖于该库的任何目标之前调用。如果您使用link_libraries()
在创建目标之前,您应该能够简单地传递 assimp
至target_link_libraries()
,它会将其转发给链接器 -lassimp
.
更好的解决方案是提供 target_link_libraries()
具有 libassimp.so
的绝对路径, target_link_libraries(<target> ${ASSIMP_LIBRARY_DIRS}/libassimp.so)
(请注意,我们不在此处为库添加 -l
标志前缀)。不过,请继续阅读。
自 assimp-config.cmake
不创建任何 CMake
目标,最干净的解决方案是自己创建一个,如果 CMake
能够找到该包:
if (assimp_FOUND)
set(ASSIMP_LIBRARY "assimp")
add_library(${ASSIMP_LIBRARY} SHARED IMPORTED)
set_target_properties(${ASSIMP_LIBRARY} PROPERTIES IMPORTED_LOCATION "${ASSIMP_LIBRARY_DIRS}/libassimp.so")
endif(assimp_FOUND)
然后照常链接到它:target_link_libraries(<target> ${ASSIMP_LIBRARY})
关于cmake - 将 assimp 库与 find_package 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082471/
我们有一个 CMakeLists.txt 链接(例如)opencv 到我们的各种二进制文件。这是按如下方式完成的: find_package(OpenCV REQUIRED core imgproc
我有一个名为 messages 的外部项目.我正在使用 ExternalProject_Add 来获取和构建项目。 如果我使用 find_package(messages REQUIRED)在顶级 C
我有一个带有配置文件支持组件的 cmake 包,例如 find_package(myPack REQUIRED COMPONENTS foo bar) 在 myPackConfig.cmake 中我通
是否有一个变量存储与包版本类似的找到的包的路径? find_package(name) message("name version: ${name_VERSION}") #something like
是否有一个变量存储与包版本类似的找到的包的路径? find_package(name) message("name version: ${name_VERSION}") #something like
我可以在哪里或如何获得 find_package 支持的软件包的完整列表? 我知道这些是模块,所以它们必须驻留在某个地方? 我正在为 C++/ROS 构建在线自动打包系统,我需要一份详细的可用内容列表
我需要使用 mangrove(基于 mongo-c-driver 和 mongo-cxx-driver 的 mongo ODM 库)并将其作为 CMake ExternalProject_Add 命令
这可能是一个新手错误,但我处于学习 python 的早期阶段。 运行 Win7 64 位 Python 是 2.7.2 64 位,python 在 CMD 提示符下运行良好。 I downloaded
我正在尝试将 OpenCv 包含在一个项目中,实际上我的计算机上有 2 倍于该库的相同版本。一种在/good/path 中使用额外的所需函数(Cuda 和 OpenGl 支持)编译,另一种在/old/
我目前正在尝试编写我的第一个重要的 CMake 项目,但我无法检查 FIND_PACKAGE() 的任何输出,因为它似乎没有将值赋予我期望的全局变量!例如,下面的代码: MESSAGE("CMake
CMake manual of Qt 5使用 find_package并说: Imported targets are created for each Qt module. Imported tar
在我的 CMake 项目中,我提供了用户可编辑的 Boost 的默认路径。 set(PATH_BOOST_DEFAULT "/softs/boost/${BOOST_VER}/${ARCH}/gcc/
在我的CMake包中,有一个对find_package的调用。这成功了,太好了!但是,事实证明这是该软件包的错误版本。我现在要删除该程序包。但是,我不知道它在系统上的什么位置,也不知道CMake必须在
当我尝试安装我的包时,它没有安装任何东西。当我手动执行 find_packages 时,它返回一个空列表。 这是我的 setup.py 文件: from setuptools import setup
在文件 CMakelists.txt 中我看到 find_packages 和 catkin_package: find_package(catkin REQUIRED COMPONENTS rosc
当我尝试安装我的包时,它没有安装任何东西。当我手动执行 find_packages 时,它返回一个空列表。 这是我的 setup.py 文件: from setuptools import setup
我正在创建一个 python 包(第一次)并且能够打包内容,但我在打包子目录中的一个数据文件时遇到问题。我的目录结构如下所示 ├── Jenkinsfile ├── MANIFEST.in ├── R
因此,我想创建一个 C 库,该库可以通过 cmake 中的 find_package 函数轻松地在其他项目中使用。具体来说,我想要一个名为 foo 的项目,可以像这样访问: find_package
确保 cmake 仅从特定根目录中查找库和 header 的最佳方法是什么。 假设: 我们只想查看特定目录(例如:/mysdkroot/) 我们要忽略所有不在特定目录中的文件(例如,不应使用/usr/
我试图避免 cmake find_package 使用系统中的 FindJPEG.cmake,我创建了 FindJPEG.cmake 的拷贝并稍微更改它并在其中放入一条消息(状态“...”)能够区分它
我是一名优秀的程序员,十分优秀!