2011-10-07 36 views
6

Có thể thiết lập trình biên dịch theo cách sao cho nó biên dịch tệp thi hành/DLL cho cả x86 và x64 không? Ý tôi là, một tệp phù hợp cho cả hai nền tảng.Biên dịch cho cả x86 và x64

Tôi chỉ biết cách chọn nền tảng riêng biệt, nhưng tôi muốn cả hai.

Có thể không?

Trả lời

19

x86 thực thi được hỗ trợ đầy đủ trên máy chủ x64. Ví dụ. bất kỳ EXE nào bạn biên dịch trong chế độ 32 bit sẽ chạy mà không gặp bất kỳ sự cố nào trên máy chủ 32 bit 64 bit. Nếu bạn không biết tại sao bạn cần 64-bit thực thi, có thể bạn không, vì vậy thực thi 32-bit một mình sẽ đủ.

Tuy nhiên, với DLL, đó là vấn đề khác. Cấu trúc của DLL (32 bit hoặc 64 bit) phải khớp với tệp thực thi nơi tệp DLL sẽ được sử dụng. Ví dụ. nếu bạn đang viết một phần mở rộng Explorer cho x64 Windows, explorer.exe sẽ là 64-bit, do đó, DLL của bạn cũng phải là 64-bit, nếu không nó không thể được nạp.

Không có cách nào để kết hợp hai kiến ​​trúc khác nhau thành một DLL hoặc EXE trên Windows. Vì vậy, bạn sẽ cần hai DLL nếu bạn cần hỗ trợ cả máy chủ 32 bit và 64 bit.

+0

Để kết hợp 32 bit và 64 bit thành một tệp thực thi, bạn có thể thực hiện với trình tự trích xuất 32 bit có thể phát hiện nền tảng và trích xuất/chạy EXE chính xác cho nền tảng hiện tại. Tuy nhiên, điều này sẽ không có bất kỳ lợi ích thực sự nào đối với hai tập tin thực thi. –

+6

@haimg: EXE 32 bit có thể chạy trên hệ thống Windows 64 bit chỉ khi cài đặt thành phần WOW64. Trong các phiên bản Windows 64 bit đầu tiên, WOW64 là một thành phần bắt buộc, nhưng bắt đầu trong Windows Server 2008 R2, WOW64 bây giờ là tùy chọn để nó có thể hoặc không thể được cài đặt. –

+0

@ RemyLebeau-TeamB: Điểm hợp lệ. Tuy nhiên, bạn đã bao giờ nhìn thấy một hệ thống sản xuất thực tế với WOW64 gỡ cài đặt? Tôi không thể tưởng tượng rằng bên ngoài lĩnh vực của các hệ thống nhúng ... – haimg

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