通过objdump链接到没有头文件的库

时间:2011-12-15 14:50:56

标签: c++ header shared-libraries objdump

所以我有一个没有头文件的.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*)'

我做错了吗?如果没有供应商提供的标题,我还能如何链接这个库?

1 个答案:

答案 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_CRCCalculate_Message_CRC_FUcPUc,而其他编译器可以像Calculate_Message_CRC_XUzFUz那样处理它。您可以使用nmgrep在代码中查找Calculate_Message_CRC以查看错位名称。它与libglo_crc.so中的相同吗?