我有一个共享库(目前正在编译、加载和运行)mylib.so
。在这个库中,我想使用一个新函数(在另一个外部库中注册它)。签名是bool my_function(const QVariant *, PyObject **)
。
这个新函数在一个单独的 .cpp 文件中定义,该文件被编译为一个对象,然后链接到mylib.so
.
所以我OBJECT
用我的自定义函数创建了一个新函数
ADD_LIBRARY(helper_lib OBJECT helper_lib.cpp)
并在构建我的图书馆时包括这个
ADD_LIBRARY(mylib SHARED source.cpp $<TARGET_OBJECTS:helper_lib>)
它因“未定义对 `my_function' 的引用而失败”
我知道
- 文件
helper_lib.o
生成 nm helper_lib.o
节目0000000000000000 T _Z11my_functionPK8QVariantPP7_object
nm mylib.o
节目U my_function
helper_lib.o
传递给 clang++ :clang++ -fPIC [...] -o my_lib.so mylib.o helper_lib.o [...]
我很难看出错误发生在哪里。我可以想象有一些错误,mylib.o
其中显示了一个无法与符号名称匹配的未损坏的helper_lib.o
符号名称,但我也可能完全走错了轨道。
helper_lib.h
void my_function();
helper_lib.cpp
#include "helper_lib.h"
void my_function()
{
return;
}
source.cpp 更复杂,因为它主要包含sip自动生成的代码。