C++嵌入python开发 Python.h代码中没有找到他依赖了python38.dll,只有看到依赖了python38.lib的代码。
一个是动态链接库,一个是静态链接库。
我使用C++编译好的软件。竟然需要附带python38.dll。。那 python38.lib静态编译的意义在哪?
为什么在Python.h 的头文件中。包括他的内部引入的其他文件。也都没找到对于python38.dll的调用。可能是我技术不到位,没找到吧。
最好不要在安装有python环境中去测试。一定要单独拷贝python安装目录的所有文件。并且卸载python 删除环境变量。才可以测试出正确结果。
因为有几天的时间内,我以为。并不需要携带python38.dll的。后来才发现。是环境变量影响了结果。
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 “采纳” 感谢支持!
静态链接库(.lib)在编译时直接嵌入到可执行文件中,而动态链接库(.dll)在程序运行时动态加载。因此,在使用静态链接库编译的程序中,不需要附带相应的动态链接库,因为所需的所有函数都已经嵌入到可执行文件中了。但是,如果使用的是动态链接库,则需要在运行程序时加载相应的动态链接库,因此需要附带python38.dll文件。在没有安装python环境的系统中,可能需要拷贝所有python文件,包括python38.dll。
在vs2019中新建一个空项目,把模式调整到x64的模式,在项目的相对路径下新建一个文件夹,用来存放我们自定义lib库的资料:
在其下一级目录,分别再新建一个lib文件夹和include文件夹,将第一步中的头文件和生成的lib文件,分别放入include文件夹和lib文件夹。
新建c++文件,输入一下代码:
#include<iostream>
#include<stdlib.h>
#include<testlib.h>
using namespace std;
int sum(int a, int b, int c)
{
//调用自定义lib库中的函数
return add(a, b)+c;
}
int main()
{
cout << sum(1, 2, 3) << endl;
system("pause");
return 1;
}
在引入的自定义头文件处会报错,且识别不到add()函数,我们需要在项目的属性中配置一下:
运行结果: