Link 带有 CMake 的 OpenSubdiv 库

Link library OpenSubdiv with CMake

我正在尝试制作一个使用 Pixar 的 OpenSubdiv 库的 C++ 程序:https://github.com/PixarAnimationStudios/OpenSubdiv

我已经成功构建了库,包括使用该库的 "tutorials"。

OpenSubdiv 和我自己的程序都是用 CMake 构建的(我有一些,但经验不多)。出于测试目的,我有一个 C++ 代码所在的项目文件夹,我在这个文件夹中还有一个 OpenSubdiv 文件夹,我在 OpenSubdiv/build 中构建了库。我用于测试目的的 C++ 代码与 pixar 使用 opensubdiv 提供的教程之一相同,名为 "far_tutorial_0.cpp"。本教程在 Opensubdiv 文件夹中编译和工作正常,使用非常长且复杂的 CMake 脚本来安装整个库。但是,当我将它移出 Opensubdiv 文件夹并尝试使用简单的 CMake 脚本进行编译时,我遇到了问题。这是我使用的 CMake 脚本:

cmake_minimum_required (VERSION 2.6)

project (test)

add_executable(test test.cpp)

include_directories(OpenSubdiv/build)
target_link_libraries(test osdCPU)

这成功地编译了代码,没有任何错误消息,但是当我尝试执行代码时,它显示 "error while loading shared libraries: libosdCPU.so.3.0.0.beta: cannot open shared object file: No such file or directory"。

我曾尝试将库名称更改为 "osdCPU.so.3.0.0.beta"(这在编译时会出错),并且我曾尝试使用这两个库名称(这会给出相同的错误)。文件 "libosdCPU.so.3.0.0.beta" 位于 OpenSubdiv/build/lib 文件夹内,就在 "libosdCPU.so".

旁边

有人知道怎么回事吗?

您还必须使用 CMake 命令 link_directories.

提供库 osdCPU 的位置

此外,我鼓励您使用像这样的特定变量来形式化您的代码(包括您可以通过命令 ccmake 修改的缓存变量):

set(osdCPU_PATH_DEFAULT "/default/path/to/osdCPU")
set(osdCPU_PATH "${osdCPU_PATH_DEFAULT}" CACHE PATH "Path to osdCPU")
set(osdCPU_INCLUDE_DIRS ${osdCPU_PATH}/include)
set(osdCPU_LIBRARY_DIRS ${osdCPU_PATH}/lib)
set(osdCPU_LIBRARIES osdCPU)

那你可以打电话

include_directories(${osdCPU_INCLUDE_DIRS})
link_directories(${osdCPU_LIBRARY_DIRS})
# ...
target_link_libraries(test ${osdCPU_LIBRARIES})