如何在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_library
是 ctypes.CDLL
的更便携版本,您也可以尝试使用它,因为它可能会提供更好的错误消息。对于 CDLL
,您需要指定完整路径。示例:
import ctypes, os
l = ctypes.CDLL(os.path.join('win64', 'HSMdApi.dll'))
综上所述,以上假定问题出在 HSMdApi.dll
的加载上,但这不应涉及粘附或模块。您所在的目录中是否有字典残留 运行 脚本?或者 .rootmap
可通过 PATH
envar 访问的文件指向已被删除的库?
我正在尝试 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_library
是 ctypes.CDLL
的更便携版本,您也可以尝试使用它,因为它可能会提供更好的错误消息。对于 CDLL
,您需要指定完整路径。示例:
import ctypes, os
l = ctypes.CDLL(os.path.join('win64', 'HSMdApi.dll'))
综上所述,以上假定问题出在 HSMdApi.dll
的加载上,但这不应涉及粘附或模块。您所在的目录中是否有字典残留 运行 脚本?或者 .rootmap
可通过 PATH
envar 访问的文件指向已被删除的库?