您好,我正在尝试通过链接外部库来编译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: *;
};
在here下回答了类似的查询没有帮助。我想知道是否还有其他人遇到过类似的错误并已解决。
我的GCC版本
-bash-3.2$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
答案 0 :(得分:0)
最后,问题中的链接会与其他答案稍作修改。这是我的解决方法。
我用以下内容创建了一个新的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文件操作系统ABI无效。
从其他答案中可以找到解决方案,建议使用patchelf并修改intert部分,因为共享文件通常没有该部分,因此无济于事。
我还尝试编译glibc2.7并使用
构建我的二进制文件-Wl,--dynamic-linker
-Wl,--rpath
标记指向glibc2.7。仍然是徒劳的。