неопределенная ссылка на `__isoc99_sscanf@GLIBC_2.7 ' - PullRequest
0 голосов
/ 07 сентября 2018

Привет, я пытаюсь скомпилировать файл src, связав внешнюю библиотеку.

Ошибка при получении ниже
неопределенная ссылка на `__isoc99_sscanf@GLIBC_2.7'

make -f GNUmakefile
g++ -m32 -D_POSIX_PTHREAD_SEMANTICS -g -Wl,--version-script=fix.txt -D_GNU_SOURCE    -I../include ConnectionAndAuthExample.cpp -o ../Linux/ConnectionAndAuthExample_32 -L../Linux -lsomelib
../Linux/libsomelib.so: undefined reference to `__isoc99_sscanf@GLIBC_2.7'

Содержимое fix.txt

GLIBC_2.7 {
 global: *;
 local: *;
};

Подобный запрос был дан ответ ниже здесь не помогает. Я хочу знать, сталкивался ли кто-либо еще с подобной ошибкой и разрешил ли ее.

Моя версия GCC

-bash-3.2$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)

1 Ответ

0 голосов
/ 11 сентября 2018

Наконец ссылка в вопросе поможет с небольшими изменениями по сравнению с другими ответами. Вот мое исправление.

Я создал новый файл cpp с содержанием ниже

#include <iostream>
#include <stdarg.h>

__asm__(".symver __isoc99_sscanf,__isoc99_sscanf@GLIBC_2.7");

#ifdef __cplusplus
extern "C" {
#endif

int __isoc99_sscanf(const char *a, const char *b, va_list args)
{
   int i;
   va_list ap;
   va_copy(ap,args);
   i=sscanf(a,b,ap);
   va_end(ap);
   return i;
}

#ifdef __cplusplus
}
#endif

Скомпилировал его, чтобы получить объектный файл, и использовал его вместе с fix.txt, упомянутым в вопросе.

Однако я хотел бы сообщить, что поскольку моя сторонняя библиотека была скомпилирована в более поздней версии. Я получаю файл ELF OS ABI недействительным при запуске моего двоичного файла.

Существует решение из какого-то другого ответа, в котором предлагается использовать patchelf и модифицировать раздел intert, но это не помогает, поскольку в общих файлах этого раздела нет.

Я также пытался скомпилировать glibc2.7 и собрать бинарный файл, используя

-Wl,--dynamic-linker
-Wl,--rpath

флаги, указывающие на glibc2.7. Все еще напрасно.

...