gpt4 book ai didi

c++ - 如何在cppyy中加载库?

转载 作者:行者123 更新时间:2023-12-02 10:31:14 25 4
gpt4 key购买 nike

我正在尝试在 python 中使用 cppyy 来导入 C++ 文件。我想加载 HSMdApi.h 和 HSMdApi.lib。这是目录结构

enter image description here

这是代码

import cppyy
cppyy.include('include/HSMdApi.h')
cppyy.load_library('win64/HSMdApi.lib')


我成功加载了头文件。但是当我加载库时,我得到了一个错误
Error in <TWinNTSystem::DynamicPathName>: win64/HSMdApi.lib does not exist in [a list of environment PATH] or has wrong file extension (.dll)


如果我删除 .lib,我会遇到另一个错误。
cppyy.load_library('win64/HSMdApi')

>> cling::DynamicLibraryManager::loadLibrary(): LoadLibrary: returned 126: The specified module could not be found.

我正在使用win10 64bit,AMD64bit,使用Anaconda3,python 3.7安装cppyy。我记得在 cppyy 安装期间有一个关于“bdist_wheel”的警告。
 Command "bdist_wheel" is disabled
WARNING: Legacy build of wheel for 'cppyy' created no files.
Command output:
Command "bdist_wheel" is disabled

我想有一些设置问题。由于 cppyy 很新,我找不到类似的问题。
感谢您的帮助。

最佳答案

要加载的库是(动态).dll,而不是(静态).lib 库。您无需指定扩展名,因为如果未提供,则会添加该扩展名。 python 可执行文件是否也使用了 64 位(交互式启动 python 时在欢迎消息中打印构建)? bdist_wheel 警告可以忽略(轮子被禁用 b/c pip 不尊重需求依赖顺序,但正常构建会这样做,因此如果为安装而不是轮子而构建则很好)。
load_library旨在成为 ctypes.CDLL 的更便携版本您也可以尝试,因为这可能会提供更好的错误消息。对于 CDLL ,您确实需要指定完整路径。例子:

import ctypes, os
l = ctypes.CDLL(os.path.join('win64', 'HSMdApi.dll'))

综上所述,以上假设问题在于加载 HSMdApi.dll ,但这不应该涉及紧贴或模块。在运行脚本的目录中是否有字典残留?或 .rootmap可通过 PATH 访问的文件envar 指向已被删除的库?

关于c++ - 如何在cppyy中加载库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62172222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com