我将我的系统升级到了Fedora 33之后,发现stdlib.h无法解析一些数据结构:
In file included from /usr/include/c++/10/cstdlib:75,
from /usr/include/c++/10/ext/string_conversions.h:41,
from /usr/include/c++/10/bits/basic_string.h:6545,
from /usr/include/c++/10/string:55,
from /home/ideepika/ceph5/ceph/src/rocksdb/include/rocksdb/cache.h:27,
from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.h:12,
from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.cc:10:
/usr/include/stdlib.h:935:5: error: expected initializer before ‘__attr_access’
935 | __attr_access ((__read_only__, 2));
| ^~~~~~~~~~~~~
/usr/include/stdlib.h:940:3: error: expected initializer before ‘__attr_access’
940 | __attr_access ((__write_only__, 1, 3)) __attr_access ((__read_only__, 2));
| ^~~~~~~~~~~~~
/usr/include/stdlib.h:994:30: error: expected initializer before ‘__attr_access’
994 | __THROW __nonnull ((2)) __attr_access ((__write_only__, 2, 3));
| ^~~~~~~~~~~~~
In file included from /usr/include/c++/10/ext/string_conversions.h:41,
from /usr/include/c++/10/bits/basic_string.h:6545,
from /usr/include/c++/10/string:55,
from /home/ideepika/ceph5/ceph/src/rocksdb/include/rocksdb/cache.h:27,
from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.h:12,
from /home/ideepika/ceph5/ceph/src/rocksdb/cache/clock_cache.cc:10:
/usr/include/c++/10/cstdlib:154:11: error: ‘mbstowcs’ has not been declared in ‘::’
154 | using ::mbstowcs;
| ^~~~~~~~
/usr/include/c++/10/cstdlib:171:11: error: ‘wcstombs’ has not been declared in ‘::’
171 | using ::wcstombs;
| ^~~~~~~~
错误的源头仅仅是因为#include,因此来自rocksdb的源代码看起来并不可疑。
正在调查中...将会用相关细节更新,如果需要添加更多细节,请告诉我。
<cstdlib>
可以正常地被包含。错误表明正在构建某个大型软件包。它可能在做一些不太规范的事情,并且被新编译器绊倒了。闻起来像是“using namespace std”。 - Sam Varshavchikstdlib.h
或stdint.h
的引入,但那可能不是原因。 - Ted Lyngmo