2013-08-18 35 views
2

我有一個程序,設置鐺編譯器實例,並添加使用HeaderSearchOptions類包含路徑。當我在輸入文件libavutil/samplefmt.c(來自ffmpeg包)上運行ParseAst時,屏幕上顯示以下消息。基本上,它不能解決一些(gcc)內置函數。我如何擺脫這個錯誤?通常,如果通過HeaderSearchOptions設置包含路徑,我如何確保不會錯過我的gcc安裝的所有包含路徑?鐺。如何克服「未知的內置」錯誤信息

謝謝!

#include "..." search starts here: 
#include <...> search starts here: 
. 
/usr/include/freetype2 
/usr/include/fribidi 
/usr/local/include 
/usr/include/clang/Basic 
/opt/llvmrelease/bin/../lib/clang/3.4/include 
/usr/include/i386-linux-gnu 
/include 
/usr/include 
End of search list. 
In file included from libavutil/samplefmt.c:19: 
libavutil/common.h:258:12: error: use of unknown builtin '__builtin_clz' 
    return av_log2((x - 1) << 1); 
     ^
libavutil/intmath.h:89:23: note: expanded from macro 'av_log2' 
#define av_log2  ff_log2 
        ^
libavutil/intmath.h:45:29: note: expanded from macro 'ff_log2' 
# define ff_log2(x) (31 - __builtin_clz((x)|1)) 
          ^
libavutil/samplefmt.c:59:14: error: use of unknown builtin '__builtin_strlen' 
     if (!strcmp(sample_fmt_info[i].name, name)) 
      ^
/usr/include/i386-linux-gnu/bits/string2.h:804:22: note: expanded from macro 'strcmp' 
     && (__s1_len = __builtin_strlen (s1), __s2_len = __builtin_strlen (s2), \ 
        ^
libavutil/samplefmt.c:59:14: note: did you mean '__builtin_strchr'? 
/usr/include/i386-linux-gnu/bits/string2.h:804:22: note: expanded from macro 'strcmp' 
     && (__s1_len = __builtin_strlen (s1), __s2_len = __builtin_strlen (s2), \ 
        ^
libavutil/samplefmt.c:59:14: error: use of unknown builtin '__builtin_strcmp' 
     if (!strcmp(sample_fmt_info[i].name, name)) 
      ^
/usr/include/i386-linux-gnu/bits/string2.h:807:9: note: expanded from macro 'strcmp' 

回答

4

當您進行項目配置時,一定會變得有趣。該ff_log2代碼,例如,在裏面:

#if HAVE_FAST_CLZ && AV_GCC_VERSION_AT_LEAST(3,4) 

所以,你需要確保HAVE_FAST_CLZ沒有定義,你應該確定在這一方面。你可以做類似的事情來修復strcmp

+0

謝謝。我在config。*文件'#define HAVE_FAST_CLZ 1'中有以下行。當我刪除它時,它正在編譯。但令我驚訝的是,當我直接通過gcc編譯項目時,我沒有收到內置錯誤(HAVE_FAST_CLZ設置爲1)。你能告訴我爲什麼只有當我設置clang並添加包含路徑時纔會發生,它不起作用嗎?我很確定我正在添加所有包含路徑,所以它不太可能是原因。 – user763410

+0

編譯器可以直接由編譯器定義,而不包含任何包含文件中實際存在的符號。相反,編譯器有一個內部的「builtins」列表,它在編譯時會查找和處理。 – Brian

+0

@布萊恩,我有種內在的想法。但在這種情況下,令我驚訝的是,當我直接調用clang時,我沒有收到錯誤,但是當通過設置compilerInstance通過我的程序調用時,我得到了錯誤。設置時是否需要添加ay路徑?這裏是我的代碼鏈接... http://pastebin.com/cc0rMFr6 – user763410