在幾個字問題:在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'? –