2017-05-05 53 views
7

我試圖在用Swift編寫的Xcode項目中使用LLVM C API。爲此,我鬆散地按照指南here,但有麻煩。在編譯步驟,加入了包括路徑在Xcode構建設置後,我收到以下錯誤:在Swift Xcode項目中使用LLVM C API

<unknown>:0: error: module 'LLVM_Backend.CodeGen.PBQP.math' requires feature 'cplusplus' 
/Users/freddy/Development/llvm-source/build/include/llvm/Support/DataTypes.h:35:10: note: submodule of top-level module 'LLVM_Backend' implicitly imported here 
#include <math.h> 
     ^
<module-includes>:1:9: note: in file included from <module-includes>:1: 
#import "./Analysis.h" 
     ^
/Users/freddy/Development/llvm-source/llvm/include/llvm-c/./Analysis.h:22:10: note: in file included from /Users/freddy/Development/llvm-source/llvm/include/llvm-c/./Analysis.h:22: 
#include "llvm-c/Types.h" 
     ^
/Users/freddy/Development/llvm-source/llvm/include/llvm-c/Types.h:17:10: error: could not build module 'LLVM_Support_DataTypes' 
#include "llvm/Support/DataTypes.h" 
     ^
/Users/freddy/Development/Xcode Projects/SwiftLLVMTest/SwiftLLVMTest/main.swift:10:8: error: could not build Objective-C module 'LLVM_C' 
import LLVM_C 

在幻燈片中的下一個步驟是添加的標誌:

-Xcc -D__STDC_CONSTANT_MACROS \ 
-Xcc -D__STDC_LIMIT_MACROS 

但我不確定將它們放置在構建設置中的位置 - 將它們添加到「其他C標誌」或「其他Swift標誌」選項似乎沒有任何作用。

我應該怎麼做呢?

+0

嗨@Jumhyn,很難看到你已經做了什麼以及它失敗了,所以我建議你看看這些文章:https://lowlevelbits.org/how-to-use -llvm-api-with-swift /,https://medium.com/compileswift/how-to-setup-xcode-swift-project-to-use-llvm-c-apis-3ccbf081d002 – AlexDenisov

回答

2

嘗試通過使用Homebrew簡單運行brew install llvm來安裝LLVM預編譯。

注:我強烈建議使用雨燕的包裝,如LLVMSwift,在這種情況下,你應該遵循從這裏開始它的安裝說明。但是,如果您想自己直接訪問LLVM,請繼續閱讀。

項目的期望目標下添加/usr/local/opt/llvm/include到你的頭搜索路徑和/usr/local/opt/llvm/lib到庫搜索路徑下的「生成設置」:

Added to search paths

並拖動/usr/local/opt/llvm/lib/libLLVM.dylib(開在Finder中與open -R '/usr/local/opt/llvm/lib/libLLVM.dylib' )到「常規」下的「鏈接框架和庫」(並使其如圖所示爲「必需」):

Added to "Linked Frameworks and Libraries"

最後,創建一個Objective-C橋接報頭(steps 1-2 in this tutorial如果你不知道如何),幷包括您需要哪個頭文件(例如,#include <llvm-c/Core.h>): Objective-C Bridging Header

而你所有的設置!像在Swift代碼中一樣,簡單地使用任何LLVM類。

+0

This Works!請注意,在包含之前,我必須在文件頂部「定義__STDC_LIMIT_MACROS」和「__STDC_CONSTANT_MACROS」。 你知道爲什麼使用定製安裝的方法無效嗎? – Jumhyn

+0

我問,因爲'brew install llvm'只安裝LLVM 3.5而不是我從源代碼構建的4.0。 – Jumhyn

+0

我很高興這個作品!請記住將其標記爲「已接受」。在哪個文件中你必須添加'#define's?我認爲這些通常只用於編譯,而Homebrew版本則是預編譯的,所以你會需要它們似乎很奇怪。另外,Homebrew爲我安裝的版本實際上是4.0.0(請運行'/ usr/local/opt/llvm/bin/llc --version'來檢查)。嘗試運行'brew update && brew upgrade llvm'以確保您安裝了最新版本。 – Coder256