我怎样才能 cmake/make 一个 CGAL 二进制文件正确链接到 OSX 上的 libassimp dylib?
How can I cmake/make a CGAL binary that correctly links against a libassimp dylib on OSX?
我认为这对于了解这些东西的人来说非常简单;请过度解释,因为我不习惯 OSX.
上的 cmake 或命令行开发
我正在开始使用 CGAL,并从终端(http://doc.cgal.org/latest/AABB_tree/ 第 3.2 节)中正确构建和 运行ning 的示例之一。我将该代码复制到它自己的文件夹中的 .cpp,然后
/opt/local/bin/cgal_create_cmake_script
cmake .
make .
这很好用; cgal 创建脚本引导一个 cmake 文件,然后从那里开始一个标准的构建过程。
我现在对使用 libassimp 添加到该示例项目感兴趣,以便加载 .PLY 文件。在另一个文件夹中,我获取了 libassimp 的源代码,并通过以下方式安装:
cmake -G 'Unix Makefiles'
make
sudo make install
这似乎是成功的; /usr/local/lib/libassimp 中有几个 libassimp .h 文件,还有一个 /usr/local/lib/libassimp.dylib
回到我的 CGAL 示例项目,我尝试
#include <assimp/Importer.hpp>
int main() {
Assimp::Importer importer;
return 0;
}
(即只是为了测试库的成功集成。)
当我 运行 make 我得到:
[100%] Building CXX object CMakeFiles/sample.dir/sample.cpp.o
Linking CXX executable sample
Undefined symbols for architecture x86_64:
"Assimp::Importer::Importer()", referenced from:
assimp_test() in sample.cpp.o
_main in sample.cpp.o
"Assimp::Importer::~Importer()", referenced from:
assimp_test() in sample.cpp.o
_main in sample.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [sample] Error 1
make[1]: *** [CMakeFiles/sample.dir/all] Error 2
make: *** [all] Error 2
这并不让我吃惊;我大概需要向 CMakelists.txt 添加一些内容。但是什么!
在询问后找到了这个,这给了我需要的线索:How to find a library with cmake?
基本上我将 CMakelists.txt 中的相关行更改为:
create_single_source_cgal_program( "sample.cpp" )
target_link_libraries (sample assimp)
这是可行的,因为显然当你告诉 cmake 到 target_link_libraries(EXENAME FOO) 时,它会寻找 /usr/local/lib/libFOO.dylib
我认为这对于了解这些东西的人来说非常简单;请过度解释,因为我不习惯 OSX.
上的 cmake 或命令行开发我正在开始使用 CGAL,并从终端(http://doc.cgal.org/latest/AABB_tree/ 第 3.2 节)中正确构建和 运行ning 的示例之一。我将该代码复制到它自己的文件夹中的 .cpp,然后
/opt/local/bin/cgal_create_cmake_script
cmake .
make .
这很好用; cgal 创建脚本引导一个 cmake 文件,然后从那里开始一个标准的构建过程。
我现在对使用 libassimp 添加到该示例项目感兴趣,以便加载 .PLY 文件。在另一个文件夹中,我获取了 libassimp 的源代码,并通过以下方式安装:
cmake -G 'Unix Makefiles'
make
sudo make install
这似乎是成功的; /usr/local/lib/libassimp 中有几个 libassimp .h 文件,还有一个 /usr/local/lib/libassimp.dylib
回到我的 CGAL 示例项目,我尝试
#include <assimp/Importer.hpp>
int main() {
Assimp::Importer importer;
return 0;
}
(即只是为了测试库的成功集成。)
当我 运行 make 我得到:
[100%] Building CXX object CMakeFiles/sample.dir/sample.cpp.o
Linking CXX executable sample
Undefined symbols for architecture x86_64:
"Assimp::Importer::Importer()", referenced from:
assimp_test() in sample.cpp.o
_main in sample.cpp.o
"Assimp::Importer::~Importer()", referenced from:
assimp_test() in sample.cpp.o
_main in sample.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [sample] Error 1
make[1]: *** [CMakeFiles/sample.dir/all] Error 2
make: *** [all] Error 2
这并不让我吃惊;我大概需要向 CMakelists.txt 添加一些内容。但是什么!
在询问后找到了这个,这给了我需要的线索:How to find a library with cmake?
基本上我将 CMakelists.txt 中的相关行更改为:
create_single_source_cgal_program( "sample.cpp" )
target_link_libraries (sample assimp)
这是可行的,因为显然当你告诉 cmake 到 target_link_libraries(EXENAME FOO) 时,它会寻找 /usr/local/lib/libFOO.dylib