我有一个 .so 库,并nm -gC
在其上运行。
我看到这样的输出:
0011a011 W void my_fun< unsigned char>(unsigned char*, unsigned char, int)
我可以包含的所有标题都不包含此函数,但我想从我的 cpp 文件中调用它。
我该怎么做呢?
我有一个 .so 库,并nm -gC
在其上运行。
我看到这样的输出:
0011a011 W void my_fun< unsigned char>(unsigned char*, unsigned char, int)
我可以包含的所有标题都不包含此函数,但我想从我的 cpp 文件中调用它。
我该怎么做呢?
我可以包含的标题都不包含此功能,
从nm 手册页:
W
w
该符号是一个弱符号,尚未专门标记为弱对象符号。
所以它是一个弱符号。如果没有头文件声明它,那么它可能没有被定义。您可能仍然尝试自己声明并调用它以防万一(您需要链接到库):
void my_fun(unsigned char*, unsigned char, int);
// ...
my_fun(foo, bar, baz);
如果这是一个 C++ 函数,那么您不能以可移植的方式使用dlopen()
API。
dlopen(3)
dlsym(3)
,并将其转换为适当类型的函数指针dlclose(3)
认识你的新朋友:
void *dlopen(const char *filename, int flag);
char *dlerror(void);
void *dlsym(void *handle, const char *symbol);
int dlclose(void *handle);
wikipedia总结了我一直使用的大多数平台动态库加载机制。
g++ -shared -fPIC myProgram.cpp -o libmyprogram.so
如果您想将它与以下内容一起使用,它将编译myProgram.cpp
为:.so
main.cpp
g++ main.cpp -L. -lmyProgram
你可以只声明方法
void my_fun(unsigned char*, unsigned char, int);
然后尝试使用/调用它。基本上,为它创建自己的(隐式)标题。当然,这取决于您的库中定义的符号。