所以我有一个没有头文件的.so文件,我想编译代码和链接(长篇故事)
无论如何,我得到objdump来输出demangled headers
objdump -g -x -C libglo_crc.so
我得到的结果如下:
long int Calculate_Message_CRC__FUcPUc (int iLength /* 0x8 */, unsigned char *iMess /* 0xc */)
所以我知道这是错误的名字,我创建了这样的原型:
long int Calculate_Message_CRC(unsigned char, unsigned char *);
然后尝试调用Calculate_Message_CRC函数,但我总是得到一个未定义的引用错误:
g++ test.cpp -L. -l glo_crc
undefined reference to `Calculate_Message_CRC(unsigned char, unsigned char*)'
我做错了吗?如果没有供应商提供的标题,我还能如何链接这个库?
答案 0 :(得分:0)
int
,而不是usigned char
。objdump -g -x -C libglo_bc.so
,但您正在关联glo_crc
(-l glo_crc
)。为什么?编译器将搜索名为libglo_crc.so
的库,但根据您的问题,函数Calculate_Message_CRC
位于libglo_bc.so
。这是错字吗?或者我错过了什么? UPD1:
正如 Steve C 所说:你确定库是用相同的编译器编译的吗? Mangling强烈依赖于编译器。一个编译器可以管Calculate_Message_CRC
到Calculate_Message_CRC_FUcPUc
,而其他编译器可以像Calculate_Message_CRC_XUzFUz
那样处理它。您可以使用nm
和grep
在代码中查找Calculate_Message_CRC
以查看错位名称。它与libglo_crc.so
中的相同吗?