2009-05-17 32 views
6

Tôi ổn với việc sử dụng Cygwin hoặc MinGW, nhưng tôi cần kết thúc bằng mã 64 bit, chứ không phải 32 bit. Điều này là do tôi sẽ gọi DLL từ 64-bit được quản lý C#. Tôi không thể tìm thấy và tham khảo tốt cho việc thiết lập các công cụ đó để tạo các tệp nhị phân 64 bit. Ngoài ra, nó sẽ được tốt đẹp nếu GCC là phiên bản 4, không phải phiên bản 3 như đi kèm với cài đặt Cygwin của tôi.Làm cách nào để biên dịch mã posix hiện có cho Windows 64 bit?

Một giải pháp thay thế sẽ là một số hình thức liên lạc giữa các quá trình. Tôi sẽ nghiên cứu điều đó, nhưng những gì tôi trình bày ở trên là những gì tôi thực sự muốn.

+0

Tôi tìm thấy một cửa sổ Ming64 xây dựng tại http://www.drangon.org/mingw/ dường như nó sắp hoạt động. Không có vấn đề với các tập tin tiêu đề không tìm thấy, vv Nhưng sau đó cc1plus.exe (gọi là g + +) bị rơi. Thở dài. – Fantius

Trả lời

6

64-bit MinGW, dựa trên (vừa được phát hành) gcc-4.4.0, có lẽ là đặt cược tốt nhất của bạn. (Kể từ khi dự án mingw-w64 trên sourceforge.net đang chuyển sang mingw-w64.org nó tốt hơn để sử dụng mingw-w64.org)

Chi tiết hướng dẫn:
1. Tải archive
2. Extract nó ở đâu đó dưới Cygwin. Trong trường hợp của tôi, thư mục Cygwin cấp cao nhất là C:\cygwin, tôi trích ra gói vào mingw thư mục, và kết thúc với những nội dung sau đây trong C:\cygwin\mingw (mà có thể nhìn thấy như /mingw dưới Cygwin:

$ ls -l /mingw 
total 1 
drwxr-xr-x+ 2 user None 0 May 10 08:32 bin 
drwxr-xr-x+ 2 user None 0 May 10 05:45 include 
drwxr-xr-x+ 2 user None 0 May 10 08:30 info 
drwxr-xr-x+ 3 user None 0 May 10 08:30 lib 
drwxr-xr-x+ 3 user None 0 May 10 05:45 libexec 
drwxr-xr-x+ 4 user None 0 May 10 05:45 man 
lrwxrwxrwx 1 user None 17 May 17 17:20 mingw -> x86_64-pc-mingw32 
drwxr-xr-x+ 3 user None 0 May 10 04:16 share 
drwxr-xr-x+ 5 user None 0 May 10 04:18 x86_64-pc-mingw32 

3. Bây giờ biên dịch một số . C++ code tôi sử dụng:

// t.cc 
#include <vector> 
#include <string> 

using namespace std; 
int main() 
{ 
    vector<string> vs; 
    vs.push_back("abc"); 
} 

Và biên dịch nó như thế này:

$ /mingw/bin/x86_64-pc-mingw32-g++ t.cc 

4. Cuối cùng, verif y kết quả là một Windows/x 64 thực thi, bằng cách chạy dumpbin /headers a.exe:

Microsoft (R) COFF/PE Dumper Version 7.00.9466 
Copyright (C) Microsoft Corporation. All rights reserved. 


Dump of file a.exe 

PE signature found 

File Type: EXECUTABLE IMAGE 

FILE HEADER VALUES 
      8664 machine (AMD64) 
       10 number of sections 
     4A10AF9F time date stamp Sun May 17 17:45:19 2009 
      ABA00 file pointer to symbol table 
      EC4 number of symbols 
       F0 size of optional header 
       27 characteristics 
        Relocations stripped 
        Executable 
        Line numbers stripped 
        Application can handle large (>2GB) addresses 
+0

Đó là các gói Linux, phải không? Tôi muốn xây dựng và chạy trên Windows. – Fantius

+0

Ahh, tôi vừa nhận thấy một bản dựng Windows trong thư mục Automated Builds tại liên kết bạn đăng. Tôi nghĩ đó sẽ là chính xác những gì tôi cần. – Fantius

+0

Tôi đang gặp sự cố khi thực hiện tác vụ này. Khi tôi đã cài đặt MinGW32 trước đây, tôi đã sử dụng trình cài đặt. Đây không phải là trình cài đặt.Tôi đã thêm thư mục bin vào đường dẫn của tôi và nó có thể tìm thấy g ++, nhưng g ++ không có ý tưởng tìm kiếm các tiêu đề và thư viện ở đâu. Khi tôi sử dụng trình cài đặt, mọi thứ chỉ hoạt động. – Fantius

0

Các gcc docs nói:

Những công tắc '-m' được hỗ trợ trong Ngoài việc trên trên AMD x86- 64 bộ xử lý trong môi trường 64 bit.

-m32 -m64 Tạo mã cho môi trường 32 bit hoặc 64 bit. Môi trường 32 bit đặt int, long và pointer thành 32 bit và tạo mã mà chạy trên bất kỳ hệ thống i386 nào. Môi trường 64-bit gồm 32 bit và dài và trỏ tới 64 bit và tạo mã cho kiến ​​trúc x86-64 của AMD.

Lưu ý rằng điều đó sẽ ổ đĩa bạn điên, tôi nghĩ rằng, nếu mingw thực sự nó như vậy, kể từ khi bình thường trên Windows 64 dài là 32 bit và lâu dài là 64-bit con trỏ cỡ loại.

+1

Tôi đã thử rằng trong Cygwin và MinGW và cả hai đều phàn nàn rằng chế độ 64-bit không được biên dịch. Đó là khá nhiều những gì tôi mong đợi xảy ra bởi vì tôi không có phiên bản 64-bit của một trong những thứ đó. Đó là những gì tôi đang cố gắng tìm. – Fantius

+1

Cấu hình gcc mingw được định cấu hình với --target = x86_64-pc-mingw32 tạo mã với sizeof (dài) == 4 và sizeof (long long) == 8 –

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