CMake python链接问题

时间:2017-10-27 08:33:56

标签: python c cmake

我昨天开始和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")

1 个答案:

答案 0 :(得分:0)

将以下内容添加到 CMakeLists.txt

novaclient.Client(Version, User, Password, Project_ID, Auth_URL)

因此强制使用python 2.7