我昨天开始和CMake合作,所以还是非常非常新手。我试图在c语言中嵌入一些python,更确切地说,我想从c程序调用python脚本。我在网上查阅了一些资源,在这篇文章CMake not linking Python之后,我得到了最好的结果。在
{1是我的python的一个实现^:1。在
在我的CMakeLists.txt文件我有
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_library(TARS SHARED ${SOURCES})
target_link_libraries(TARS ${PYTHON_LIBRARIES})
它建立了,但给了我一个结果利比亚人。我的问题是,我需要这是一个可执行文件,我不知道如何做到这一点。我玩过类似的东西
^{pr2}$对于一些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: undefined reference to `PyString_FromString'
/home/alxhoff/git/siemens/siemens-personal/TARS/src/main.c:139: undefined reference to `PyInt_AsLong'
/home/alxhoff/git/siemens/siemens-personal/TARS/src/main.c:160: undefined reference to `Py_Finalizer'
经过一些修改后,我发现python的默认3.5版本缺少这些函数,而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")
将以下内容添加到CMakeLists.txt文件
因此强制使用Python2.7
相关问题 更多 >
编程相关推荐