对__isoc99_sscanf的未定义引用

undefined reference to __isoc99_sscanf

本文关键字:未定义 引用 sscanf isoc99      更新时间:2023-10-16

我有一个使用sscanf的静态C库libex.a。使用-std=c99

编译库

我想在一些c++代码中使用库函数,我正在使用-std=c++11编译,但我得到以下错误:

lib/libex.a(srcfile.o): In function `my_function':
/srcpath/srcfile.c:215: undefined reference to `__isoc99_sscanf'

在戳了一下之后,我发现sscanf由于向后兼容性黑客而有版本问题,因此重定向到__isoc99_sscanf,所以我怀疑这是问题的根源。然而,我检查了我的glibc版本,它看起来足够新,其他地方建议的解决方案(将glibc的副本更新到至少2.7)没有帮助。

$ ldd --version
ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19

有什么建议吗?

当然,如果还有其他相关的信息,请告诉我。

谢谢!

更新:如果我用-D_GNU_SOURCE编译libex.a,错误信息将更改为undefined reference to sscanf。不确定这是否有助于找出问题所在。

如果其他人遇到这个问题:

c++代码的Makefile禁用了使用标志-nostdlib -nodefaultlibs -nostartfiles的标准库和启动文件。相反,它链接到英特尔SGX SDK中包含的stdio.h版本,用于在enclaves中运行。该版本不支持sscanf