【问题标题】:undefined reference to `__isoc99_sscanf@GLIBC_2.7'未定义对 `__isoc99_sscanf@GLIBC_2.7' 的引用
【发布时间】:2019-02-12 12:17:37
【问题描述】:

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

【问题讨论】:

    标签: gcc g++ gnu-make


    【解决方案1】:

    最后,问题中的链接对其他答案进行了轻微修改。这是我的解决方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 2012-02-07
      • 2011-03-27
      • 2022-01-22
      • 2016-04-04
      • 2015-11-03
      • 2011-08-11
      • 2019-07-22
      相关资源
      最近更新 更多