2012-04-09 7 views
0

MSリンカを使用してLLVMコンパイラによって生成されたファイルは、objが、私は私のサンプルCコードをコンパイルするためにLLVMオンラインコンパイラを使用

int main() { return 0; } 

生成LLVMアセンブリ、

; ModuleID = '/tmp/webcompile/_31588_0.bc' 
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" 
target triple = "x86_64-unknown-linux-gnu" 

define i32 @main() nounwind uwtable { 
    %1 = alloca i32, align 4 
    store i32 0, i32* %1 
    ret i32 0 
} 

その後、私はコンパイルLLVMをリンクに失敗しました。 OBJファイルに組み立て、私はERRを得たlink.exe a.oを使用してOBJファイルをリンクしようとした

llc -filetype=obj a.ll 

または

fatal error LNK1107: invalid or corrupt file: cannot read at 0x438 

正しいobjファイルをlink.exeに挿入するにはどうすればよいですか?


  • 詳しい情報は、私はcygwinのインストールされていなかったのVisual Studio 11を使用してLLVMを構築しました。

  • link.exeはこちらからVisual Studio 11
  • LLVMは最新のソースコードから作成されました。

私はアセンブリにVC++コンパイラを使用して同じコードをコンパイルした場合、それは

; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.50402.0 

include listing.inc 

INCLUDELIB LIBCMT 
INCLUDELIB OLDNAMES 

PUBLIC main 
; Function compile flags: /Odtp 
_TEXT SEGMENT 
main PROC 
; File c:\tmp\u.c 
; Line 1 
    xor eax, eax 
    ret 0 
main ENDP 
_TEXT ENDS 
END 

llc -filetype=asm j.ll次のコードを生成し、このようになります。 ml.exeで失敗します。あなたは奇妙な土地である

.def  _main; 
    .scl 2; 
    .type 32; 
    .endef 
    .text 
    .globl _main 
    .align 16, 0x90 
_main:         # @main 
# BB#0: 
    pushl %eax 
    movl $0, (%esp) 
    xorl %eax, %eax 
    popl %edx 
    ret 
+1

asmはLinuxとWindowsの間で互換性がないと仮定しますが、同じプログラムはVS 11コンパイラでasmにコンパイルされた場合のように見えますか? –

+0

@GradyPlayerは、llvmとVCによって生成されたアセンブリはかなり異なっているようです。 llvmコンパイラにVC互換のコードを生成させるにはどうすればいいですか? – woodings

+0

@woodings:オブジェクトファイルをCOFFに変換する変換ツールを書くか、それに応じてLLVMソースを変更しますか?または単にGradyの答えにリンクされているページの指示に従ってください。 – 0xC0000022L

答えて

1

あなたを助けるかもしれません。したがって、llcはCOFFではなくELFオブジェクトファイルを(デフォルトで)生成します。確かにlink.exeはそれを受け入れません。あなただけのいくつかのウィンドウにトリプルターゲットを変更し、すべてがうまくいくと仮定することができないことを

注:

  1. COFFオブジェクト・コード・エミッションWIP
  2. C/C++は、ターゲットに依存する言語ではありませんので、あなたされますhttp://llvm.org/docs/FAQ.html#platformindependent
関連する問題