我已经创建了一个静态库,其中包含用于导入模块的函数:

void callFn()
{
_putenv_s("PYTHONPATH", ".");
Py_Initialize();
namespace python = boost::python;
    try
    { 
        python::object my_python_class_module = python::import("pythonFile");

        python::object test = my_python_class_module.attr("Test")();

        test.attr("fn")("from c++");
    }
    catch (const python::error_already_set&)
    {
        PyErr_Print();
    }
}

PythonFile.py的内容:

class Test():
def fn(self,message):
print ("From python ")

我正在从exe中使用的另一个x.dll调用此函数(allFn()):

void ClassName::abc()
{
    callFn();      
}

最初,当我编译x.dll时,我收到一个链接错误: LINK:致命错误LNK1104:无法打开文件‘Boost_python39-vc142-mt-x64-1_71.lib’

然后,我构建了Boost源代码以创建Boost_python39-vc142-mt-x64-1_71.lib. 这样做可以使编译成功,但是在运行应用程序时,应用程序崩溃并显示错误:

加载库x时出错-无法加载库x:找不到指定的模块.

请注意,在调用Fn()中注释"try"中的3行,并重复上述过程并不会使应用程序崩溃.您知道Boost::Python::Import()为什么会导致应用程序崩溃吗?

推荐答案

如果不满足任何x.dll的运行时依赖项,您将收到这样的错误.

您正在链接Boost Python的共享库版本,但它无法动态加载Boost PythonDLL.

您有两个选项可供 Select .

  1. 编译一个静态版本的Boost Pythonb2 link=static并将其链接.
  2. boost_python39-vc142-mt-x64-1_71.dll放入与您的库相同的文件夹中.

Python相关问答推荐

当多个值具有相同模式时返回空

使可滚动框架在tkinter环境中看起来自然

try 将一行连接到Tensorflow中的矩阵

在np数组上实现无重叠的二维滑动窗口

对象的`__call__`方法的setattr在Python中不起作用'

Pandas DataFrame中行之间的差异

如何保持服务器发送的事件连接活动?

如何在TensorFlow中分类多个类

在Python中使用if else或使用regex将二进制数据如111转换为001""

如何更改groupby作用域以找到满足掩码条件的第一个值?

在Python中计算连续天数

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

根据Pandas中带条件的两个列的值创建新列

如何使用matplotlib查看并列直方图

在Django中重命名我的表后,旧表中的项目不会被移动或删除

如何在Python中自动创建数字文件夹和正在进行的文件夹?

利用SCIPY沿第一轴对数组进行内插

查找查找表中存在的列值组合

Pandas 删除只有一种类型的值的行,重复或不重复