未定义引用`__isoc99_sscanf@GLIBC_2.7'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未定义引用`__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: *;
};

下面回答类似的问题qazxsw poi没有帮助。我想知道是否有其他人遇到类似的错误并解决了它。

我的GCC版本

here
答案

最后,问题中的链接有助于略微修改其他答案。这是我的修复。

我创建了一个包含以下内容的新cpp文件

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

编译它以获取目标文件并将其与问题中提到的fix.txt一起使用。

但是,我想告诉我,因为我的第三方库是在更高版本上编译的。当我运行二进制文件时,我得到的ELF文件操作系统ABI无效。

有一些其他答案建议使用patchelf和修改插入部分的解决方案没有帮助,因为共享文件大多没有该部分。

我还尝试编译glibc2.7并使用构建我的二进制文件

#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

标志指向glibc2.7。仍然是徒劳的。

以上是关于未定义引用`__isoc99_sscanf@GLIBC_2.7'的主要内容,如果未能解决你的问题,请参考以下文章

__isoc99_sscanf() 有啥作用?

错误: - 未定义引用 `_imp__GetStockObject@4' 和未定义引用 `_imp__SetBkMode@8'

对 `_imp__SetupDiGetClassDevsA@16' 的未定义引用(即使使用 -lsetupapi)

_MSC_VER详细介绍

对“imp____glewEnableVertexAttribArray”的未定义引用

对`__glewCreateShader`的未定义引用[重复]