osg*_*sgx 6 linker gcc scanf ld linker-scripts
我有一个应用程序,当我尝试运行它时会出错:
/lib/libc.so.6: version `GLIBC_2.7' not found
但是glibc 2.7需要的唯一符号是
__isoc99_sscanf@@GLIBC_2.7 
我想写一个小的单个函数"library",用这个符号作为__sscanf()的别名
我怎么能用gcc/ld做到这一点?
我的变体不被接受,因为"@@"符号
 int __isoc99_sscanf@@GLIBC_2.7(const char *, const char *, ...) __attribute__((alias("__sscanf")));
第二个是我的变种
#include <stdarg.h>
int __isoc99_sscanf1(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;
}
   // __asm__(".symver __isoc99_sscanf,__isoc99_sscanf@@GLIBC_2.7");
    __asm__(".symver __isoc99_sscanf1,__isoc99_sscanf@@GLIBC_2.7");
但它以链接器中的"找不到符号__isoc99_sscanf @@ GLIBC_2.7的版本节点"结束.
我发现@felipecs 的回答非常有帮助。此外,我们的应用程序必须使用 ocaml 进行一些动态链接,我们发现给定的脚本不适用于此场景,因为它使应用程序仅将 __isoc99_sscanf 符号导出为全局符号。
GLIBC_2.7 {
 global: *;
};
上面的脚本解决了这个问题并允许 ocaml 的动态链接器正常工作。单独使用该-D_GNU_SOURCE选项不足以避免此问题,因为对 GLIBC_2.7 的依赖来自我们静态链接的预构建二进制文件。
| 归档时间: | 
 | 
| 查看次数: | 6445 次 | 
| 最近记录: |