【发布时间】:2017-09-27 11:35:14
【问题描述】:
我希望在项目中使用 OpenVDB 库。该库已在 Windows7 x64 上使用 \MD 成功编译(如https://github.com/rchoetzlein/win_openvdb 中所述)。 OpenVDB_cookbook 也成功编译和执行。如果我将自己的代码放入说明书中,它也会成功编译和执行。
但是,
如果我将库链接到现有项目,
或者我将相同的代码(来自说明书)复制粘贴到新项目中,并使用相同的 cmakelists.txt、Find*.cmake 文件以及项目属性中与说明书中相同的所有选项,
它抛出一个链接器错误'LNK2019: unresolved external symbols "void_cdecl openvdb::v3_0_0::initialize(void)" referenced in function main'
即使是最简单的表单代码:
#include <openvdb.h>
void main()
{
openvdb::initialize();
}
引发此链接器错误。
任何想法我做错了什么?搞了几天也没解决。
所有库 IlmBase、OpenEXR、glew、glfw、boost 和 OpenVDB 都已使用 cmake 成功链接,并显示在项目属性页面中。
感谢您的帮助。
【问题讨论】:
-
您是否在 CMake 中选择了“共享库”?如果是这样,您必须将 dll 带到新项目中
-
@Kev1n91 感谢您的评论。所有 dll 都存在于可执行文件所在的文件夹中,它是由 cmakelists.txt 中已经存在的 post_copy 宏完成的。没有选择共享库的选项。它应该在cmake GUI中吗?还是我应该把它写在 cmake 文件中?能详细点吗
-
@Kev1n91 只是为了补充我之前的评论:对于每个库,我使用“target_link_libraries”添加 *.lib 文件,并在 cmake 文件中使用“include_directories”添加包含目录。从 cmake GUI 中,我确保找到每个库的 *.lib 文件。例如,在配置后我得到“OpenVDB 库:在 */OpenVDB/lib/openvdb.lib 找到”并且我还检查了它是否存在于 VS 的项目属性中。
-
在 CMake Gui 中是一个“高级”复选框,那么您应该会看到共享库的复选框
-
问题通过添加
\src\解决了。和 \src\.. 到 properties->C/C++->General 下的 Additional Include Directories。其中 是源和构建所在的目录。我不知道为什么我必须添加这个。