2

所以我有一个没有头文件的 .so 文件,我想编译代码和链接(长篇大论)

无论如何,我得到了 objdump 来输出解耦的标头

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*)'

难道我做错了什么?如果没有供应商提供的标头,我还能如何链接到这个库?

4

1 回答 1

0
  • 如前所述,检查第一个参数必须是int,而不是usigned char
  • objdump -g -x -C libglo_bc.so在你的问题中看到了,但你链接的是glo_crc-l glo_crc)。为什么?编译器将搜索名称为 like 的库libglo_crc.so,但根据您的问题,函数Calculate_Message_CRC位于libglo_bc.so. 是错字吗?还是我错过了什么?

UPD1:正如Steve C所说:你确定这个库是用同一个编译器编译的吗?重整很大程度上取决于编译器。一个编译器可以Calculate_Message_CRC处理,Calculate_Message_CRC_FUcPUc而其他编译器可以处理它,如Calculate_Message_CRC_XUzFUz. 您可以使用nmand在您的代码中grep查找Calculate_Message_CRC以查看损坏的名称。和中的一样libglo_crc.so吗?

于 2011-12-15T15:03:22.933 回答