2009-09-24 48 views
7

Tôi muốn xây dựng "trình biên dịch chéo gcc" để biên dịch các ứng dụng "c/C++" trên môi trường "Linux" nhưng cho mục tiêu "Windows".Xây dựng trình biên dịch chéo GCC (từ "Linux" sang "Windows")

Tôi đã thực hiện này cho đến nay:

  1. cài đặt các công cụ cần thiết và các gói cho việc xây dựng GCC được liệt kê trên trang "Prerequisites for GCC".

  2. Downloaded nguồn yêu cầu:
    "gcc-core-4.4.1", "gcc-g++-4.4.1", "binutils-2.19.1", "w32api-3.13-mingw32", "mingwrt-3.16-mingw32"

  3. Created này hệ thống phân cấp thư mục:
    "$ {HOME}/gcc/"- cho trình biên dịch chéo cuối cùng
    " $ {HOME}/src/"- cho các nguồn
    " $ {HOME}/src/build-binutils/i386-mingw32/"- để tạo binutils thành" i386-mingw32 " mục tiêu
    "$ {HOME}/Src/build-gcc/i386-mingw32/"- để xây dựng gcc để "i386-mingw32" mục tiêu

  4. builded binutils gói:

    cd" $ {HOME}/src/build-binutils/i386 -mingw32/"
    ../../binutils-2.19.1/configure --prefix =" $ {HOME}/gcc "--target = i386-mingw32 --disable-nls
    make
    hãy cài đặt

  5. Sao chép tiêu đề "w32api" và "mingwrt" vào thư mục cài đặt:

    cp -R "$ {HOME}/src/w32api-3.13-mingw32/include" "$ {HOME}/gcc/i386-mingw32"
    cp -R "$ {HOME} /src/mingwrt-3.16- mingw32/include" "$ {HOME}/gcc/i386-mingw32"


Và bây giờ khi tôi đang cố gắng xây dựng "c (chỉ) cross-trình biên dịch":

cd "${HOME}/src/build-gcc/i386-mingw32/" 
../../gcc-4.4.1/configure --prefix="${HOME}/gcc" --target=i386-mingw32 --enable-languages=c --with-headers="${HOME}/gcc/i386-mingw32/include" --disable-nls 
make<br> 

nó đã được xây dựng một cái gì đó khoảng 4 phút và sau đó mang lại cho tôi những lỗi này:

${HOME}/gcc/i386-mingw32/bin/ld: dllcrt2.o: No such file: No such file or directory 
collect2: ld returned 1 exit status 
make[2]: *** [libgcc_s.dll] Error 1 
make[2]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32/i386-mingw32/libgcc' 
make[1]: *** [all-target-libgcc] Error 2 
make[1]: Leaving directory `${HOME}/src/build-gcc/i386-mingw32' 
make: *** [all] Error 2 

Từ thông báo lỗi đó tôi thực sự không biết phải làm gì bây giờ: - (((.


Có ai biết vấn đề ở đâu không?
Cảm ơn.

Trả lời

11

Đó là thực sự OK: cách thứ đi, bạn cần phải

  1. build binutils
  2. cài đặt tiêu đề
  3. xây dựng một trình biên dịch C phần: đủ để tạo ra các file đối tượng, nhưng không đủ để liên kết
  4. tạo thời gian chạy win32api và mingw (bao gồm số thiếu dllcrt2.o)
  5. tạo trình biên dịch C hoàn chỉnh (và các giao diện người dùng khác, chẳng hạn như C++, Fortran, Ada, bất cứ điều gì, nếu bạn wan t them)

Bạn đã thực hiện thành công bước 3 ở trên; nó không xây dựng libgcc (mà là một thư viện hỗ trợ GCC), nhưng điều đó có nghĩa là lõi trình biên dịch C là chức năng (mặc dù nó sẽ không thể liên kết, nó vẫn có thể tạo các tệp đối tượng hợp lệ). Bạn có thể kiểm tra xem bằng cách xem tệp gcc/xgcc trong thư mục xây dựng GCC của bạn.

Vì vậy, bạn cần chuyển sang bước tiếp theo, không lo lắng về lỗi hiện tại của bạn.

(Để actuall cài đặt trình biên dịch C một phần, bạn nên chạy make với các tùy chọn -k, để có nó làm điều đó tốt nhất, thậm chí khi đối mặt với lỗi. Ví dụ, sử dụng make -k install.)

+0

Cảm ơn bạn rất nhiều vì bình luận của bạn: "Bạn đã thực hiện thành công bước 3 ở trên". Tôi nghĩ rằng nếu tôi nhận được bất kỳ lỗi nào tôi không thể đi đến bước tiếp theo, nhưng (may mắn thay) tôi đã sai. Tiếp theo tôi đã biên dịch thành công win32api, nhưng tôi đã có một số lỗi khi tôi cố gắng biên dịch mingwrt - một cái gì đó đã sai với "luồng". Vì vậy, tôi đã quyết định biên dịch gcc với các tham số sau: --prefix = "$ {HOME}/gcc" --target = i386-mingw32 --program-prefix = i386-mingw32 --enable-languages ​​= c, C++ --với -headers = "$ {HOME}/gcc/i386-mingw32/bao gồm" --disable-nls --disable-threads - có thể chia sẻ -disable-libssp. Và điều này đã làm việc !!! – Petike

+0

Tôi xin lỗi vì một chút sai lầm từ nhận xét trước đó: sự cố ở tùy chọn "được chia sẻ" và KHÔNG có tùy chọn "chủ đề". Vì vậy, nó biên dịch cũng không có "--disable-thread" quy định. – Petike

+0

Về chủ đề, bạn cũng có thể xây dựng GCC với '--enable-libgomp' (cho OpenMP) nếu bạn đã cài đặt thư viện pthreads-win32. –

0

Tôi grepped thông qua các nguồn MinGW, và thấy rằng dllcrt2.o là một cái gì đó được xây dựng ra khỏi gói mingwrt. Tôi cho rằng bạn phải biên dịch và cài đặt nó, không chỉ sao chép các tiêu đề?

+0

Có, có. Sao chép tiêu đề chỉ là một trong nhiều bước. Sau bước thứ 5 trong bài đăng của tôi, tôi nên làm điều này: -6. Xây dựng "c (chỉ) cross-compiler". -7. Thêm vị trí chỉ với các tệp nhị phân đã biên dịch vào biến môi trường "PATH". -8. Xây dựng "win32api". -9. Xây dựng "mingwrt". -10. Xây dựng "c và C++ cross-compiler". Nhưng hiện tại tôi mới ở bước thứ 6 và gặp lỗi đó. – Petike

+0

Hmmm ... đã không đùa giỡn với MinGW. Nhưng khi tôi thiết lập trình biên dịch chéo giai đoạn đầu, tôi sử dụng "- không có tiêu đề" trên dòng cấu hình để cho nó không dựa vào bất kỳ loại thư viện C hoặc thời gian chạy nào cho đích. Tôi không biết bạn đang theo dõi cách thức nào hoặc cách mọi thứ hoạt động với MinGW, nhưng có lẽ bạn đã cho nó một cảnh quay. – DevSolar

1

Có tiền biên dịch các trình biên dịch chéo của MinGW-w64 có sẵn. Điều này cho phép biên dịch các tệp nhị phân Windows 32 và 64 bit gốc từ Linux, một hướng dẫn hai phút có sẵn tại http://www.blogcompiler.com/2010/07/11/compile-for-windows-on-linux/

Chỉ trong trường hợp bạn không muốn tốn nhiều thời gian tự mình xây dựng nó.

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