bazel 编译动态库,供ctypes调用

研究了一天,原来是少看了几个字符,状态,位置太重要了

It sounds like you want to build a fully statically linked library. This can be done in Bazel by building the library using cc_binary with the linkshared attribute set to True. According to the documentation you also have to name your library libfoo.so or similar.

What enables the static library here is cc_binary's linkstatic attributes behavior. When True, which is the default, all dependencies that can be linked statically into the binary will be. Note that linkstatic does NOT behave the same on cc_library, see the documentation.

So, basically you want something like this in your BUILD file

cc_binary(
    name = "libfoo.so",
    srcs = [...],
    hdrs = [...],
    linkshared = 1,
    #linkstatic = 1 # This is the default, you don't need to add this.
)

Good luck!

https://stackoverflow.com/questions/54951531/building-libraries-with-bazel-and-hardcoding-dependencies-into-them

当你在Python中通过ctypes模块调用动态链接库(DLL)时,遇到`ctypes.ArgumentError`通常意味着传入参数的类型、数量或值不符合预期。ctypes要求函数参数和返回值需要匹配已知的C语言数据类型。 以下是可能导致`ArgumentError`的一些原因和解决方案: 1. **类型不匹配**:确认你提的参数类型与函数声明中的参数类型一致。例如,如果你应该传递一个整数,但是传递了一个字符串,就会引发这个错误。 ```python # 错误示例 my_function = cdll.myslib.my_function_string my_function("hello") # 应该是my_function(1) ``` 2. **参数数量错误**:函数期望的参数数量与实际提的不符。确保你按照文档或函数原型提正确的参数数组。 3. **NULL指针**:在C/C++中,NULL是一个特殊的指针值。如果你传递None作为需要指针类型的参数,ctypes会将其转换为NULL,这在某些函数接受非空指针时会出错。 ```python # 错误示例 some_ptr = None my_function(some_ptr) # 应该设置为my_function(ctypes.c_int(0)) ``` 4. **内存管理问题**:如果你使用了内存分配函数(如malloc、calloc)但在函数结束后忘记释放,ctypes可能会抛出异常。确保正确使用ctypes中的内存管理功能。 5. **未初始化的结构体成员**:如果函数需要特定结构体作为参数,并且结构体中有未赋值的成员,也可能会引发这个错误。确保所有必需的字段都有初始值。 处理此类错误的一般步骤是仔细检查函数的文档、参数列表以及你提的输入,确保它们完全匹配。如果仍然无法确定问题,可以尝试添加一些日志信息或使用调试工具来查看内部的调用过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值