2009-09-24 44 views
14

Tôi có phiên bản 64-bit của llvm-gcc, nhưng tôi muốn có thể tạo cả hai tệp nhị phân 32 bit và 64 bit. Có một lá cờ cho điều này? Tôi đã thử qua -m32 (hoạt động trên gcc thông thường), nhưng tôi nhận được thông báo lỗi như sau:Xây dựng 32 bit với 64-bit llvm-gcc

[[email protected]]$ llvm-gcc -m32 test.c -o test 
Warning: Generation of 64-bit code for a 32-bit processor requested. 
Warning: 64-bit processors all have at least SSE2. 
/tmp/cchzYo9t.s: Assembler messages: 
/tmp/cchzYo9t.s:8: Error: bad register name `%rbp' 
/tmp/cchzYo9t.s:9: Error: bad register name `%rsp' 
... 

Đây là số lùi; Tôi muốn tạo mã 32 bit cho bộ xử lý 64 bit!

Tôi đang chạy llvm-gcc 4.2, phiên bản đi kèm với Ubuntu 9.04 x86-64.


EDIT: Dưới đây là phần có liên quan của đầu ra khi tôi chạy llvm-gcc với cờ -v:

[[email protected]]$ llvm-gcc -v -m32 test.c -o test.bc 
Using built-in specs. 
Target: x86_64-linux-gnu 
Configured with: ../llvm-gcc4.2-2.2.source/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr/lib/llvm/gcc-4.2 --enable-languages=c,c++ --program-prefix=llvm- --enable-llvm=/usr/lib/llvm --enable-threads --disable-nls --disable-shared --disable-multilib --disable-bootstrap 
Thread model: posix 
gcc version 4.2.1 (Based on Apple Inc. build 5546) (LLVM build) 
/usr/lib/llvm/gcc-4.2/libexec/gcc/x86_64-linux-gnu/4.2.1/cc1 -quiet -v -imultilib . test.c -quiet -dumpbase test.c -m32 -mtune=generic -auxbase test -version -o /tmp/ccw6TZY6.s 

tôi nhìn vào/usr/lib/llvm/gcc- 4.2/libexec/gcc hy vọng tìm được một tệp nhị phân khác, nhưng thư mục duy nhất có x86_64-linux-gnu. Tôi có lẽ sẽ xem xét biên dịch llvm-gcc từ nguồn với các tùy chọn thích hợp tiếp theo.

+0

Thông báo lỗi bạn nhận được thực sự là lạ; bạn có thể biên dịch với -v và đăng danh sách đối số đầy đủ mà llvm-gcc thực sự đang sử dụng không? –

+0

Cập nhật với đầu ra tiết. –

Trả lời

5

thiết lập Thử:

export CFLAGS="-m32" 
export LDFLAGS="-m32" 

trước khi biên dịch ...

+0

llvm-gcc bỏ qua cả hai loại này và tạo phiên bản 64 bit. –

+0

Bạn đã cài đặt chúng: sudo apt-get cài đặt gcc-multilib libc6-i386 lib6-dev-i386 chưa? – ChristopheD

+0

Tất cả các gói đó đã được cài đặt. Nó giống như llvm-gcc được mã hóa cứng để tạo ra đầu ra 64 bit. –

4

Bạn có thể thử loạt bài này các lệnh và xem nếu nó hoạt động? Về mặt lý thuyết, nếu bạn cung cấp llvm-gcc với các tùy chọn -m32 các bước cần được thực hiện bởi llvm-gcc, nhưng có lẽ nó không làm việc một cách chính xác, vì vậy chúng ta hãy làm tất cả các bước rõ ràng:

llvm-gcc -m32 -emit-llvm test.c -c -o test.bc 
llc test.bc -march=x86 -o test.S 
gcc test.S -m32 -o test 

này nên là chuỗi các bước (hoặc một cái gì đó tương tự) mà llvm-gcc thực hiện ngầm, nhưng có vẻ như trong trường hợp của bạn nó phát ra lắp ráp 64bit vì lý do nào đó, sau đó cố gắng để lắp ráp và liên kết nó cho 32bit.

+0

Điều này gần như làm những gì tôi muốn, nhưng không hoàn toàn. Mặc dù nó thực tế tạo ra một nhị phân 32 bit, chương trình thử nghiệm của tôi nói sizeof (void *) là 8, điều này rất đáng lo ngại. –

+0

Rất tiếc, bạn cũng phải chuyển m32 sang llvm gcc. Hãy thử tập lệnh mới. – Falaina

+1

Đó là vấn đề. llvm-gcc đang bỏ qua -m32. –

1

Tôi đã có cùng một vấn đề, llvm-gcc bỏ qua các cờ, giải pháp duy nhất làm việc là chuyển từ llvm-gcc thành clang mà tôn trọng -m32. Điều đó hoặc chuyển sang một hệ điều hành 32 bit cho công việc llvm-gcc.

+0

Hmm, tôi sẽ cố gắng kêu vang vào ngày mai. –

+0

Tôi đã không sử dụng clang cắt cạnh, hoặc ít nhất không nghĩ rằng tôi đã làm như tôi đã có vấn đề với nó, tôi đã được sử dụng bất cứ điều gì release_26 là viết tắt của. svn co http://llvm.org/svn/llvm-project/llvm/branches/release_26/ llvm cd llvm công cụ cd svn co http: // llvm.org/svn/llvm-project/cfe/chi nhánh/release_26/clang Tôi về cơ bản đã bắt đầu tại đây: http://clang.llvm.org/get_started.html –

+0

hmmm, định dạng được đặt trong bình luận cuối cùng, xin lỗi –

Các vấn đề liên quan