Связывание с библиотекой без заголовочных файлов через objdump - PullRequest
2 голосов
/ 15 декабря 2011

Итак, у меня есть .so файл без заголовочных файлов, которые я хочу скомпилировать и связать с ним (длинный рассказ)

Во всяком случае, я получил objdump для вывода demangled заголовков

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 голосов
/ 15 декабря 2011
  • Как уже было сказано, проверьте первый аргумент, это должно быть 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: Как сказал Стив C : вы уверены, что библиотека была скомпилирована с тем же компилятором? Mangling сильно зависит от компилятора. Один компилятор может управлять Calculate_Message_CRC до Calculate_Message_CRC_FUcPUc, а другой - Calculate_Message_CRC_XUzFUz. Вы можете использовать nm и grep, чтобы найти Calculate_Message_CRC в своем коде, чтобы увидеть искаженное имя. Это так же, как в libglo_crc.so?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...