C++程序编译成动态库

将C++代码编译成动态库,供另一个C++程序调用。

 

写了个简单的demo,主要是看看流程。

首先,目标文件代码,test.h test.cpp

test.h:
#include <iostream>
using namespace std;
class Demo
{
public:
    Demo( int x);
    ~Demo(){};
    void print_data();
private:
    int a;
};

 

test.cpp:
#include "test.h"
Demo::Demo(int x):a(x)
{
}
void Demo::print_data()
{
    cout<<a<<endl;
}

 

编译成动态库:

g++ -c test.cpp -fPIC -o test.o

g++ -shared -o libtest.so test.o

这样就可以生成动态库libtest.so

 

接下来写个test2.cpp调用这个动态库

test2.cpp:
#include <iostream>
#include "test.h"
int main()
{
    Demo demo(999);
    demo.print_data();
    return 0;
}

 

编译:

g++ -o test2 test2.cpp -L /root/tmp -ltest

结果:

[root@one tmp]# ./test2

999

至此,动态库的生成与调用,一个简单的demo就完成了。

 

参考文档:

https://www.cnblogs.com/yushengzhou/p/8662921.html

当我们需要在Python中调用C++程序时,我们通常会选择将C++程序编译成动态库(.dll或.so文件),然后在Python中引用它。下面是一些步骤: 1.编写C++程序并将其编译为动态库,例如Windows平台上的.dll文件或Linux平台上的.so文件。 2.使用Python中的ctypes模块来加载动态库,并调用其中定义的函数。这个过程需要知道动态库中函数的名称和参数类型。 3.在Python中调用动态库中的函数,获取返回值并进行处理。 以下是一个简单的示例代码: 假设我们有一个C++程序,包含一个名为add_numbers的函数,它接受两个整数并返回它们的和。 ```c++ // add_numbers.cpp #include "add_numbers.h" int add_numbers(int x, int y) { return x + y; } ``` 我们可以将其编译为Windows平台上的.dll文件,使用以下命令: ``` g++ -shared -o add_numbers.dll add_numbers.cpp ``` 在Python中,我们可以使用以下代码来加载动态库,并调用其中的函数: ```python import ctypes # 加载动态库 add_numbers_lib = ctypes.WinDLL('add_numbers.dll') # 获取函数 add_numbers = add_numbers_lib.add_numbers # 设置参数类型 add_numbers.argtypes = [ctypes.c_int, ctypes.c_int] # 设置返回值类型 add_numbers.restype = ctypes.c_int # 调用函数 result = add_numbers(1, 2) print(result) # 输出3 ``` 相关问题: 1. C++程序编译成动态库有哪些优点? 2. Python如何加载动态库? 3. 如何在Python中调用动态库中的函数?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值