我昨天开始和CMake合作,所以还是非常非常新手。我想在c中嵌入一些python,更确切地说我想从我的c程序中调用一个python脚本。我已经在网上找到了一些资源,我在这篇文章之后得到了最好的结果,CMake not linking Python。
至于嵌入我的python代码,我的实现几乎是this python documentation example, section 5.3的1:1。
在 CMakeLists.txt 中,我有
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_library(TARS SHARED ${SOURCES})
target_link_libraries(TARS ${PYTHON_LIBRARIES})
构建但是给了我一个结果 libTARS.so 。我的问题是,我需要这是一个可执行文件,我不知道该怎么做。我玩过与
类似的东西 find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_library(TARS SHARED ${SOURCES})
target_link_libraries(TARS ${PYTHON_LIBRARIES})
add_executable(TARSEXEC ${SOURCES})
target_link_libraries(TARSEXEC TARS)
这给了我一些python包装函数未定义引用的错误。就像我说的那样,对CMake来说是个新手,所以我可能会犯一些非常明显和愚蠢的错误。任何帮助或推动正确的方向将不胜感激。
干杯
更新
我已经选择了以下CMake配置
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_executable(TARS ${SOURCES})
target_link_libraries(TARS ${PYTHON_LIBRARIES})
它给了我以下错误
/home/alxhoff/git/siemens/siemens-personal/TARS/src/main.c:101: 未定义的对'PyString_FromString'的引用
/home/alxhoff/git/siemens/siemens-personal/TARS/src/main.c:139: 未定义的引用`PyInt_AsLong'
/home/alxhoff/git/siemens/siemens-personal/TARS/src/main.c:160: 未定义的对“Py_Finalizer”的引用
在一些grepping之后,我发现默认的3.5版本的python缺少这些函数而2.7包含它们。我现在只需迫使CMake使用2.7。
使用以下
解决set(PYTHON_EXECUTABLE "/usr/bin/python2.7")
set(PYTHON_INCLUDE_DIR "/usr/include/python2.7")
set(PYTHON_LIBRARIES "/usr/lib/x86_64-linux-gnu/libpython2.7.so")
答案 0 :(得分:0)
将以下内容添加到 CMakeLists.txt
novaclient.Client(Version, User, Password, Project_ID, Auth_URL)
因此强制使用python 2.7