我有兩個靜態庫文件(.a)和一個使用opt pass創建的bitecode文件(.bc)。在這個咬文件中我添加了我的自己的代碼,並在此代碼中,我需要調用靜態庫中聲明的函數。我已經注意到,LLVM-LD工具不再存在鐺新的版本,所以我嘗試了兩種不同的方法這三個文件鏈接(兩個圖書館和一個bitecode文件):當在llvm中鏈接* .a和* .o文件時出現錯誤
嘗試用gcc鏈接:
與LLC創建file.bc的目標文件
$llc -filetype=obj file.bc -o file.o
鏈接對象和庫與海灣合作委員會
$gcc -I lib1.a lib2.a -O3 file.o -o file
個這些命令給我這個錯誤:
file.o: In function `main':
file.bc:(.text+0xc0): undefined reference to `function_in_lib'
collect2: error: ld returned 1 exit status
(function_in_lib是,我需要從lib和編譯器調用無法找到此功能的函數)
2.的第二種方法是使用ld命令
與LLC創建file.bc
的對象文件$llc -filetype=obj file.bc -o file.o
鏈接對象和庫用LD
$ld -o linked lib1.a lib2.a file.o -lc
這些命令給我這個錯誤:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004002b0
new.o: In function `main':
new.bc:(.text+0xc0): undefined reference to `function_in_lib'
我試圖改變參數的順序,但我有更多的錯誤,當我做它。我認爲,從故障的連接成爲,任何想法?
'$ gcc的-I了lib1.a lib2.a -O3 file.o -o文件'應該改爲'$ gcc -llib1.a -llib2.a -O3 file.o -o file'。 gcc的'-I'參數是指定額外的包含路徑。 –
當我嘗試你的圖書館的建議格式時,這給我: '/ usr/bin/ld:找不到-llibtpc.a /usr/bin/ld:找不到-llibregions。一個 collect2:錯誤:LD返回1退出status' – adespotos
哎呀,我沒有在第一評論:)刪除庫的前綴和後綴('.a','.so'末和'lib'各圖書館的開始)。確保它們可用並放置在正確的目錄(通常爲'/ usr/lib /') –