程序和动态库同时引用同一个动态库的问题

程序和动态库同时引用同一个动态库的问题

问题现象

最近编码过程中遇到一个奇怪的问题。首先有一个动态库a.so,然后我自己编译了一个动态库b.so,且b.so动态引用了a.so.然后又编译了一个程序c,c同时用到了a.so和b.so。这时,a中有一个全局函数,运行了两次。我期望只运行一次。

问题解决

编译动态库b.so的时候,用a.a静态库编译。编译c的时候还是用a.so和b.so,此时正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当我们需要在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中调用动态库中的函数?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值