CMake python链接问题

2024-06-16 12:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 函数gitsrccmakelibrarieshomeincludemain
1条回答
网友
1楼 · 发布于 2024-06-16 12:29:53

将以下内容添加到CMakeLists.txt文件

   find_package(PythonLibs REQUIRED)

   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")

   include_directories(${PYTHON_INCLUDE_DIRS})
   add_executable(TARS ${SOURCES})
   target_link_libraries(TARS ${PYTHON_LIBRARIES})

因此强制使用Python2.7

相关问题 更多 >