首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在cppyy中加载库?

如何在cppyy中加载库?
EN

Stack Overflow用户
提问于 2020-06-03 19:53:13
回答 1查看 589关注 0票数 1

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

以下是代码

代码语言:javascript
复制
import cppyy
cppyy.include('include/HSMdApi.h')
cppyy.load_library('win64/HSMdApi.lib')

我成功地加载头文件。但是当我加载lib时,我得到了一个错误

代码语言:javascript
复制
Error in <TWinNTSystem::DynamicPathName>: win64/HSMdApi.lib does not exist in [a list of environment PATH] or has wrong file extension (.dll)

如果我删除.lib,我会得到另一个错误。

代码语言:javascript
复制
cppyy.load_library('win64/HSMdApi')

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

我使用的是64位win10,AMD64bit,安装了Anaconda3,Python3.7的cppyy。我记得在cppyy安装过程中有一个关于"bdist_wheel“的警告。

代码语言:javascript
复制
 Command "bdist_wheel" is disabled
  WARNING: Legacy build of wheel for 'cppyy' created no files.
  Command output:
  Command "bdist_wheel" is disabled

我猜这里有一些设置问题。由于cppyy很新,我找不到类似的问题。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 09:23:28

要加载的库是(动态) .dll,而不是(静态) .lib库。不需要指定扩展名,因为如果未提供扩展名,则会添加该扩展名。python可执行文件是否也使用64 (当以交互方式启动python时,会在欢迎消息中显示构建)?可以忽略bdist_wheel警告(轮子被禁用b/c pip不遵守需求依赖关系排序,但正常构建会这样做,因此,如果是为安装而不是为轮子进行构建,则可以很好地执行)。

load_library旨在成为ctypes.CDLL的一个更可移植的版本,你也可以尝试一下,因为这可能会给出更好的错误信息。对于CDLL,您需要指定完整路径。示例:

代码语言:javascript
复制
import ctypes, os
l = ctypes.CDLL(os.path.join('win64', 'HSMdApi.dll'))

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62172222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档