我正在尝试用python中的cppyy来导入C++文件,我想加载HSMdApi.h和HSMdApi.lib。我想加载HSMdApi.h和HSMdApi.lib。下面是目录结构
以下是代码
import cppyy
cppyy.include('include/HSMdApi.h')
cppyy.load_library('win64/HSMdApi.lib')
我成功地加载了头文件。但是当我加载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,安装了cppyy和Anaconda3,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警告可以忽略(轮子是被禁用的,因为pip不尊重需求的依赖顺序,但普通的构建是尊重的,因此如果为安装而不是为轮子构建,就没有问题)。
load_library
是为了成为更便携的 ctypes.CDLL
你也可以尝试一下,也许这样能得到更好的错误信息。对于 CDLL
你需要指定完整的路径。例子。
import ctypes, os
l = ctypes.CDLL(os.path.join('win64', 'HSMdApi.dll'))
说了这么多,以上假设问题出在加载的 HSMdApi.dll
但这不应该涉及到cling或模块。你在运行脚本的目录中是否有字典残余?或者 .rootmap
的文件。PATH
envar,指向后来被删除的库?