对“__isoc99_sscanf@GLIBC_2.7”的未定义引用

undefined reference to `__isoc99_sscanf@GLIBC_2.7'

您好,我正在尝试通过链接外部库来编译 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)

最后,问题中的 link 对其他答案稍作修改。这是我的解决方法。

我创建了一个包含以下内容的新 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 的标志。还是没用。