在几个字问题:在MAC OSX 10.8.5,与铛5.1,编译器似乎没有认识“clang5”的扩展,特别是__builtin_mul_overflow
出现为unknown builtin
。在试图编译最新的sqlite3
(3.17)后,问题就出现了,它坚持要通过这个条件#if GCC_VERSION>=5004000 || CLANG_VERSION>=4000000
强迫他们进入我。我通过了CLANG测试但未通过GCC测试(请参阅下面的版本)。OSX 10.8.5:GCC未能识别clang5延伸__builtin_mul_overflow
我已经设法绕过这个问题,修改sqlite3.c
不使用这些内置函数(对于CLANG和GCC_VERSION我有一个预处理条件检查)。
我的问题是:我误认为clang5扩展可用于我的系统?或者可能会被破坏? sqlite3.c
认为我的系统应该能够知道这些额外的内置函数,GCC-或 -CLANG版本检查成功,然后编译器(gcc
)失败,出现unknown builtin
错误。
全部细节:
$ clang --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
下面的程序:
# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__)
# define CLANG_VERSION (__clang_major__*1000000+__clang_minor__*1000+__clang_patchlevel__)
#include <stdio.h>
int main(void){
printf("CLANG_VERSION: %d\n", CLANG_VERSION);
printf("GCC_VERSION: %d\n", GCC_VERSION);
}
(从sqlite3的借用)给出的输出:
CLANG_VERSION: 5001000
GCC_VERSION: 4002001
和sqlite3.c决定使用__builtin_mul_overflow
使用这段代码(li ne 28856等):
#if GCC_VERSION>=5004000 || CLANG_VERSION>=4000000
return __builtin_mul_overflow(*pA, iB, pA);
#else
... code without the builtin which succeeds if check is short-circuited ...
#endif
'sqlite3'编译还好用'CLANG_VERSION:8000000','GCC_VERSION:4002001' ......当你'而且会发生什么#如果GCC_VERSION> = 4002001 || CLANG_VERSION> = 5001000'? –
谢谢。它像以前一样失败(从我的版本中很明显)。你知道我的clang版本字符串是否可能:'Apple LLVM version 5.1(clang-503.0.40)(基于LLVM 3.4svn)'是指除clang5 **之外的其他clang5扩展**吗? – bliako
扩展基本上用于指示当前语言(作为语言扩展或标准语言功能)是否支持'Clang'或者否则为'0',如果是,则为'1'。你试图从源代码编译哪个'sqlite3'? –