CMake 未链接 Python

2023-11-30

抱歉,如果我重复一个问题,但我只是无法在互联网上的任何地方找到我正在寻找的解决方案,但我相信这是一个非常简单的问题。

我正在尝试使用一些自定义 C++ 库扩展 python,并使用 CMake 构建我的 C++ 库。我正在按照以下说明进行操作https://docs.python.org/2/extending/extending.html,但编译不正确。

当我尝试构建它时,我收到以下消息:

"C:\Program Files (x86)\JetBrains\CLion 140.2310.6\bin\cmake\bin\cmake.exe" --build C:\Users\pkim2\.clion10\system\cmake\generated\76c451cd\76c451cd\Debug --target parsers -- -j 8
Linking CXX executable parsers.exe
CMakeFiles\parsers.dir/objects.a(main.cpp.obj): In function `spam_system':
C:/code/ground-trac/ground/launch/trunk/Software Support/Data Analysis Scripts/data_review_automation/parsers/main.cpp:9: undefined reference to `_imp__PyArg_ParseTuple'
C:/code/ground-trac/ground/launch/trunk/Software Support/Data Analysis Scripts/data_review_automation/parsers/main.cpp:12: undefined reference to `_imp__Py_BuildValue'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\parsers.dir\build.make:87: recipe for target 'parsers.exe' failed
CMakeFiles\Makefile2:59: recipe for target 'CMakeFiles/parsers.dir/all' failed
CMakeFiles\Makefile2:71: recipe for target 'CMakeFiles/parsers.dir/rule' failed
mingw32-make.exe[3]: *** [parsers.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/parsers.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/parsers.dir/rule] Error 2
mingw32-make.exe: *** [parsers] Error 2
Makefile:109: recipe for target 'parsers' failed

基于此,我怀疑这是我在 CMakeLists.txt 文件中链接内容的方式存在问题,但我不知道如何正确执行。这就是我的 CMakeLists.txt 现在的样子:

cmake_minimum_required(VERSION 2.8.4)
project(parsers)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
include_directories(C:\\Python27\\include)
link_directories(C:\\Python27\\) 
target_link_libraries(python2.7)
add_executable(parsers ${SOURCE_FILES})

我到底如何才能正确编译这个东西?我运行的是 Windows 7 64 位,并使用 CLion 作为我的 IDE。


你的第一个问题是你正在使用target_link_libraries错误:您应该将其传递给要添加链接的目标,然后传递给您要链接的库:

target_link_libraries(parsers python2.7)

你的第二个问题是你正在构建一个可执行文件,而不是一个共享库。如果你想让你的扩展可以从 python 访问,它需要是一个库。

add_library(parsers SHARED ${SOURCE_FILES})

但现在好消息来了:如果您使用内置的 CMake 模块,您的生活会变得更加简单(并且更加便携)FindPythonLibs.cmake。要构建 python 模块,您只需要执行以下操作:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(PythonLibs REQUIRED)

add_library(parsers SHARED ${SOURCE_FILES})
include_directories(${PYTHON_INCLUDE_DIRS})
target_link_libraries(parsers ${PYTHON_LIBRARIES})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 未链接 Python 的相关文章

随机推荐

  • 如何等到 Javascript forEach 循环完成后再继续下一步

    我需要等待 forEach 循环调用的函数中的所有 axios 调用运行 然后再调用另一个函数来重新加载应由 axios 调用更新的数据 function1 let arr 1 2 3 4 5 arr forEach num gt func
  • 线程过多异常

    我在黑莓开发中遇到问题 在我的应用程序中 我必须从服务器获取图像 因此我必须为从服务器加载的每个图像创建一个单独的连接线程 但是这样做时我得到 TooManyThreadsException 有关控制线程的任何想法 在黑莓中 应用程序最多可
  • Magento paypal 货币错误

    我使用牙买加货币作为我的 magento 购物车 并且我使用 paypal 快速结帐和网站支付标准 我在管理面板中设置了货币 并且贝宝设置等也完成了 我的问题是 当我单击 使用 PayPal 结帐 按钮时 出现以下错误 PayPal 网关已
  • 爆发日期从每年到每月

    我有年度每股账面价值 基点 需要将数据分解为每月的时间序列 我想加入每月价格系列来计算每月预定价格 P B 我的每月数据如下 dput below date bps 2012 06 29 2 44376 2013 06 28 1 73054
  • 使用“键盘”在失焦时打开新窗口

    我正在尝试使用模块 键盘 来跟踪我的按键 而 PySide2 小部件未处于焦点状态 效果很好 但是 当我尝试使用 键盘 快捷方式创建新的小部件时 程序崩溃了 按下按钮打开一个窗口效果很好 我还可以使用 键盘 调用非 UI 功能 例如 打印功
  • 如何在jquery中添加id?

    我在 jquery 中创建了一个对话框 还有一个按钮叫做 保存 我需要给这个保存按钮添加一个id 我怎样才能在 jquery 中实现这一点 这是我的代码 function dialog dialog height 400 width 650
  • Rails 如何正确“更新”多列 - (updated_at 也应该更新)

    我在使用 Rails activerecords 正确更新多个列时遇到问题 我想使用诸如 update 之类的东西 它基本上会在更新时更新 但我只是无法传递多个列 我可以使用 update all 但它不会使用当前时间戳更新 Updated
  • LINQ 不同查询

    我有一个 C 应用程序 它加载称为 任务 的 CLR 对象列表 每个任务都具有以下属性 public int ID get set public int TypeID get set public string TypeName get s
  • 如何在 PowerShell 中隐藏 Get-Help 中的参数(不仅仅是制表符完成)?

    我四处搜寻 找不到 否 的直接答案 但也没有找到 是 的直接答案 我已经知道的 Parameter DontShow 只影响制表符完成 一个建议是使用通用参数并测试它是否存在于 PSBoundParameters 虽然技术上可行 但它的副作
  • ES6 javascript类继承,为什么我们需要从派生类调用super()

    在 javascript ES6 中 在继承中 如果派生类有构造函数 为什么必须从派生构造函数调用 super 一些失败的例子是 带有构造函数的基类 但派生类不调用超级类 class Base constructor class Deriv
  • 如何让Xcode 3.2.3构建特定的架构?

    包含静态库时出现以下错误 缺少所需的架构 i386 文件 这在 30 秒前有效 只有当我升级到 Xcode 3 2 3 时才失败 我使用 file 命令进行检查 是的 XCode 正在构建完全错误的架构 armv6 armv7 而 不是 i
  • 如何在 NopCommerce 中实施操作过滤器

    我想更改 CheckoutController 中 OpcSaveBilling 操作的操作中的一些代码 我不想改变 NopCommerce 的核心代码 所以我需要尝试用我自己的自定义代码覆盖代码 我阅读了这篇文章以开始使用http www
  • 生成签名 APK 错误:将字节码转换为 dex 时出错以及另外 1 个错误

    当我清理 重建我的项目甚至运行应用程序时 它不会返回任何错误 但是当我生成签名的 APK 时 它返回两个错误 Error Error converting bytecode to dex Cause com android dex DexE
  • 使用 Start-Job 时本地函数调用不起作用

    function F2 String var2 function F1 String var1 F2 var2 while i le count F1 dir i Start Job ScriptBlock function F1
  • 使用 hibernate 4.0 和 spring 3.1.0.release 的事件监听器?

    这些 jar 都是新发布的 并且具有 Java EE 应用程序的最新解决方案 但我在 hibernate cfg xml 中指定 hibernate 侦听器时遇到问题 在 Spring 3 1 0 之前 LocalSessionFactro
  • 如何在 JavaScript 循环中添加延迟?

    我想在 a 中添加延迟 睡眠while loop 我尝试过这样的 alert hi for var start 1 start lt 10 start setTimeout function alert hello 3000 只有第一种情况
  • 如何计算最佳批量大小?

    有时我会遇到一个问题 OOM when allocating tensor with shape e g OOM when allocating tensor with shape 1024 100 160 其中 1024 是我的批量大小
  • 如何在 Windows 上以提升的权限运行脚本

    我正在编写一个需要执行管理任务的 pyqt 应用程序 我更愿意以提升权限来启动我的脚本 我知道这个问题在 SO 或其他论坛中被多次提出 但人们建议的解决方案是看看这个SO问题从 Python 脚本中请求 UAC 提升 但是 我无法执行链接中
  • 通过扩展实现协议[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个协议来包装使用 UIImagePickerController 的过程 以使其在我的应用程序中更加精简 我基本上有这样的东西 public protocol MediaAccessor UIIm
  • CMake 未链接 Python

    抱歉 如果我重复一个问题 但我只是无法在互联网上的任何地方找到我正在寻找的解决方案 但我相信这是一个非常简单的问题 我正在尝试使用一些自定义 C 库扩展 python 并使用 CMake 构建我的 C 库 我正在按照以下说明进行操作http