【发布时间】:2014-11-16 02:19:42
【问题描述】:
我正在尝试使用 CMake 编译一个引用 Python 的 c++ 项目。我正在使用 Cygwin,并且在 Cygwin 中有 Python2.7 源文件。
例如:
PyObject *l = PyList_New(0);
在线帮助建议我添加 -lpython2.7 链接器标志。我没有在 CMake 中正确添加它吗?否则为什么我仍然不能使用 Python 库,我该如何解决这个问题?
编译行:
C:\cygwin64\bin\cmake.exe --build "C:\Users\...\.clion10\system\cmake\generated\3e6845d6\3e6845d6\Release" --target projectname -- -j 4
CMakeList.txt 文件:
cmake_minimum_required(VERSION 2.8.4)
project(projectname)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lpython2.7")
set(SOURCE_FILES
src/cpp/...
src/cpp/...
src/cpp/..
src/cpp/...
src/cpp/...)
add_executable(projectname ${SOURCE_FILES})
错误...
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaeb4): undefined reference to `PyDict_New'
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaeb4): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `PyDict_New'
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaec4): undefined reference to `PyList_New'
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaec4): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `PyList_New'
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaf0d): undefined reference to `PyDict_New'
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaf0d): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `PyDict_New'
CMakeFiles/spot.dir/src/cpp/OBwrapper.cpp.o:OBwrapper.cpp:(.text+0xaf25): undefined reference to `PyString_FromString'
...and so on....
【问题讨论】:
-
能否显示编译行
-
更新了编译行。
-
你没有看到包含 -lpython2.7 的行吗?
-
没有包含 -lpython2.7 或我使用的任何其他库标志的行,但我知道它们在那里(stdlib 工作并将标志设置为我没有的东西会引发错误)。顺便说一句,我正在使用 CMake 和 CLion。
-
编译时使用CXX_COMPILE_FLAGS,需要在linker flags中加上-lpython2.7