问题描述
我不得不说我不熟悉 cmake。 我想将 Python C API 与 PCL(点云库)一起使用,但可能我的 Python 版本有问题。
#define PY_SSIZE_T_CLEAN
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
#include "Python.h"
#include "numpy/arrayobject.h"
#include <iostream>
#include <pcl/io/ply_io.h>
#include <pcl/point_types.h>
int main(int argc,char *argv[])
{
PyObject *pName,*pModule,*pFunc;
PyObject *pArgs,*pValue;
int i;
char * full_cls_name = argv[1];
Py_Initialize();
pName = PyString_FromString(full_cls_name);
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");
pModule = PyImport_Import(pName);
return 0;
}
和 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
# Create Project
project(demo)
add_executable(demo embeddedPython.cpp)
option(WITH_PCL "adds pcl cloud support" ON)
if(${WITH_PCL})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_PCL")
find_package(PCL required)
link_directories(${PCL_LIBRARY_Dirs})
add_deFinitions(${PCL_DEFinitioNS})
include_directories(${PCL_INCLUDE_Dirs})
#message("PCL_INCLUDE_Dirs ${PCL_INCLUDE_Dirs} " )
endif()
option(WITH_Python_C_API "adds python c api support" ON)
if(${WITH_Python_C_API})
find_package(PythonLibs required)
include_directories(${PYTHON_INCLUDE_Dirs})
#link_directories(${PCL_LIBRARY_Dirs})
#add_deFinitions(${PCL_DEFinitioNS})
#include_directories(${PCL_INCLUDE_Dirs})
endif()
target_link_libraries(demo ${PCL_LIBRARIES} ${PYTHON_LIBRARIES})
我显示了包含目录:
此代码和 CMakeList 运行良好,但是,如果我更改顺序,我的意思是如果我调用
find_package(PythonLibs required) 首先和之后,如果我调用 find_package(PCL required),我会收到如下错误:
error: ‘PyString_FromString’ was not declared in this scope
pName = PyString_FromString(full_cls_name);
^~~~~~~~~~~~~~~~~~~
/home/alitokur/Softwares/embeddedPython/embeddedPython.cpp:21:14: note: suggested alternative: ‘PyLong_FromString’
如果你看到了,PCL 和 python 使用不同的 python 包含路径。的确;我有很多问题,我认为是这种冲突导致了问题。
我的所有工作区的 Python 版本应该是什么? 如何设置python版本?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)