gcc - 未定义对 `__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: *;
};
下面回答了类似的查询,但没有帮助。我想知道是否有其他人遇到过类似的错误并解决了。
我的 GCC 版本
-bash-3.2$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
解决方案
最后,问题中的链接有助于对其他答案进行轻微修改。这是我的修复。
我创建了一个包含以下内容的新 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 的标志。还是徒劳。
推荐阅读
- csv - 多个 pcap 文件到 csv 文件
- mongodb - 无法从 MongoDB shell 连接到类 Atlas 集群
- jquery - 使用 JQuery 在 Html 表中添加新列
- python - 神经网络中 2 个隐藏层的反向传播和前向传播
- android - RadioGroup - 为什么选择每个单选按钮后按钮没有改变颜色
- javascript - 如何根据 Javascript 中的多个键对对象数组进行分组?
- python-3.x - 为什么这些线程不能同时工作?
- tensorflow - 如何为二维数据构建 LSTM 网络?
- python - ModuleNotFoundError:没有名为“inception_preprocessing”的模块
- excel - 如何正确使用具有已定义命名范围的 COUNTIFS?