gpt4 book ai didi

c++ - 通过 objdump 链接没有头文件的 so 库

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:27 26 4
gpt4 key购买 nike

所以我有一个没有头文件的 .so 文件,我想编译代码并链接到它(长话短说)

无论如何,我得到了 objdump 来输出 demangled header

objdump -g -x -C libglo_crc.so

我得到这样的结果:

long int Calculate_Message_CRC__FUcPUc (int iLength /* 0x8 */, unsigned char *iMess /* 0xc */)

所以我知道这是经过修饰的名称,我创建了一个这样的原型(prototype):

long int Calculate_Message_CRC(unsigned char, unsigned char *);

然后尝试调用 Calculate_Message_CRC 函数,但我总是以 undefined reference 错误结束:

g++ test.cpp -L. -l glo_crc
undefined reference to `Calculate_Message_CRC(unsigned char, unsigned char*)'

我做错了什么吗?如果没有供应商提供的 header ,我还可以如何链接到这个库?

最佳答案

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

更新 1:正如 Steve C 所说:你确定这个库是用同一个编译器编译的吗?重整在很大程度上取决于编译器。一个编译器可以将 Calculate_Message_CRC 管理为 Calculate_Message_CRC_FUcPUc,而其他编译器可以像 Calculate_Message_CRC_XUzFUz 一样对其进行处理。您可以使用 nmgrep 在您的代码中查找 Calculate_Message_CRC 以查看损坏的名称。它与 libglo_crc.so 中的相同吗?

关于c++ - 通过 objdump 链接没有头文件的 so 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8521929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com