如何在cppyy中加载库?

how to load library in cppyy?

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

这是代码

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 64 位,AMD64 位,安装了带有 Anaconda3 的 cppyy,python 3.7。我记得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 警告可以忽略(wheels 被禁用 b/c pip 不遵守需求依赖顺序,但正常构建会这样做,因此如果构建是为了安装而不是为了 wheels 就没问题。

load_libraryctypes.CDLL 的更便携版本,您也可以尝试使用它,因为它可能会提供更好的错误消息。对于 CDLL,您需要指定完整路径。示例:

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

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