Car*_*s00 4 c c++ linux gcc g++
在编译我的项目混合时C,C++我得到了这个错误(这在编译C++文件时):
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:
In function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’:
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:70:3:
sorry, unimplemented:
function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’
can never be inlined because it uses variable argument lists
Run Code Online (Sandbox Code Playgroud)
编译结束.
但是,当我手动编辑的文件
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h
,并删除inline修改之前,__convert_from_v它WORKS.
导致问题的函数头是inline最初的:
inline int
__convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
char* __out,
const int __size __attribute__ ((__unused__)),
const char* __fmt, ...)
Run Code Online (Sandbox Code Playgroud)
我想这样的功能不应该被标记为inline.是错误还是我做错了什么?[gcc 4.6.1,Ubuntu 11.10]
这可能是由于优化设置或重新定义inline该__convert_from_v内联力.这是一个重现错误的小型人工示例:
#define inline __always_inline
#include <bits/c++locale.h>
int main () {
__locale_t loc;
return std::__convert_from_v(loc, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)
在Ubuntu 11.10上使用g ++ 4.6.1进行编译会出错:
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: In function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’:
/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h:70:3: sorry, unimplemented: function ‘int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)’ can never be inlined because it uses variable argument lists
Run Code Online (Sandbox Code Playgroud)
因此,请检查您的代码以重新定义inline或尝试不同的优化设置.
我认为这个函数被标记为的原因inline是因为它是在标题中定义的.如果没有inline你在每个包含(通常是间接)标题的翻译单元中定义它.
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |