2013-09-24 31 views
5

我已經閱讀LLVM-dev的this thread,並面臨着同樣的問題:我不能LLVM-AR archieve庫與其他位碼文件與llvm-link幫助鏈接到另一個單位碼文件是否可以將bitcode與llvm-ar archieve鏈接到一個位碼文件中?

clang -emit-llvm -g -c -o main.bc main.c 
clang -emit-llvm -g -c -o calc.bc calc.c 
llvm-ar rcs libcalc.la calc.bc 
llvm-link libcalc.la main.bc -o test 

的問題是一樣的:llvm-link抱怨

llvm-link: libcalc.la:1:2: error: expected integer 
!<arch> 
^ 

而且閱讀How to link object to libraries with LLVM >= 3.1 ? (no GNU ld)後,我也試過LLVM-LD的llvm2.9版本。

llvm-ld --disable-opt libcalc.la main.bc -o test 

然而libcalc.la掛入模塊正確lli報告:

LLVM ERROR: Program used external function 'Square' which could not be resolved! 

那麼應該怎麼辦?

UPDATE

我然後讀Can't link against static library when compiling objects from LLVM bitcode.,發現LLVM-LD改變訂單時 WORKS:

llvm-ld --disable-opt main.bc libcalc.la -o test 

llvm-link仍然失敗。

+0

可以使用金LTO插件 - 那裏是保持組合IR文件的選項。 –

+0

@ SK-邏輯謝謝。但是,確切的選擇是什麼呢?似乎llvm文檔(http://llvm.org/docs/GoldPlugin.html)包含的內容很少。 –

+2

它被稱爲'也-emit-llvm' –

回答

7
  • llvm-link不支持位碼檔案AFAIK。它只是檢查它提供的輸入文件,並試圖將每個文件解析爲位碼文件(二進制或文本LLVM IR)。在新的LLVM中不存在llvm-ld,所以我建議遠離它。

只需連接單獨的.bc文件連同llvm-link。無論如何,位碼文件的存檔對於鏈接器來說並不具有與本地鏈接相同的好處。

+0

也許有必要調整llvm-link的功能,像老的'llvm-ld'一樣工作?我們正在處理一個巨大的圖書館,我們希望能夠實現位碼。否則手動鏈接對象會很麻煩。 –

+3

@HongxuChen:你可以建議llvmdev @提供一個補丁,讓'llvm-link'讀取檔案:-)此外,請注意,這是一個非常小巧的工具,在你的工具上實現它的功能(包括增強功能)是微不足道的擁有 –

0

你不需要的歸檔鏈接你的位碼文件:

clang -emit-llvm -g -c -o main.bc main.c 
clang -emit-llvm -g -c -o calc.bc calc.c 
clang main.bc calc.bc -o test 
相關問題