0

我正在尝试编译一些要从 Python 调用然后调用 CGAL 的 C++ 代码。

我需要能够在编译时指定一些标志,但不确定如何执行此操作,因为构建过程是

./CGAL-4.2/scripts/cgal_create_CMakeLists -s CallGCAL

cmake -DCGAL_DIR=./CGAL-4.2 .

make

而且我不想手动编辑 Makefile 或 CMakeLists

我从上面得到的错误消息没有标志告诉 gcc 它需要 Python 是

CMakeFiles/CallGCAL.dir/CallGCAL.cpp.o: In function `initmyModule()':
CallGCAL.cpp:(.text+0x5e): undefined reference to `Py_InitModule4'
CMakeFiles/CallGCAL.dir/CallGCAL.cpp.o: In function `py_polygon(_object*, _object*)':
CallGCAL.cpp:(.text+0x86): undefined reference to `Py_BuildValue'
CMakeFiles/CallGCAL.dir/CallGCAL.cpp.o: In function `py_hull(_object*, _object*)':
CallGCAL.cpp:(.text+0xa6): undefined reference to `Py_BuildValue'
collect2: ld returned 1 exit status
4

3 回答 3

1

好的解决了!!!必须将变量传递给 cmake。

工作脚本如下。

./CGAL-4.2/scripts/cgal_create_CMakeLists -s CallCGAL

cmake -DCGAL_DIR=./CGAL-4.2 -DCGAL_CXX_FLAGS="-shared -fPIC" 。

制作

rm -f CallCGAL.so

mv CallCGAL CallCGAL.so

于 2013-10-13T18:39:56.240 回答
0

创建的 CMakeLists.txtcgal_create_CMakeLists根本不是为您的用例设计的。createdCMakeLists.txt试图编译一个可执行文件,而你想创建一个module。在 中CMakeLists.txt,替换以下行:

create_single_source_cgal_program(CallCGAL.cpp)

经过:

add_library(CallCGAL MODULE CallCGAL.cpp)
target_link_libraries(CallCGAL ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} )

这样,CMake 将创建正确的 Makefile,无需重命名文件,或调整编译和链接标志。

于 2013-10-15T12:45:54.637 回答
0

我是否正确理解您想要借助 CGAL 附带的 makefile 编译您自己的代码,该代码同时使用 Python 和 CGAL?

显然是不可能的,因为 CGAL makefile 无法了解 Python。你必须编写自己的makefile,它可以基于一些现有的makefile,但也知道Phython。您报告的错误是由无法找到 Python 库来解析某些符号的加载程序生成的。因此,您需要添加到 makefile 中的只是相关选项-l-L选项。

于 2013-10-12T10:08:54.253 回答