2011-09-01 16 views
12

Ứng dụng 32 bit Delphi 2010 của tôi liên kết với một số tệp đối tượng C bằng cách sử dụng chỉ thị biên dịch $LINK. Tôi có thể làm điều này trong Delphi XE2 khi nhắm mục tiêu 64 bit?Có thể 64 bit Delphi nhắm mục tiêu liên kết tĩnh tới các tệp đối tượng C đã biên dịch không?

Tôi hiện đang biên dịch bằng cách sử dụng bcc32 phiên bản 5.5, nhưng tôi không nhớ trình biên dịch nào tôi sử dụng nếu nó chỉ ra rằng trình biên dịch C của Embarcadero chưa xuất các đối tượng 64 bit.

+3

Tôi đã đọc ở đâu đó để bạn có thể liên kết các tệp đối tượng COFF (được tạo bằng MS VC++ dưới dạng tệp .obj) trong ứng dụng Delphi 64 bit. –

+1

@Rudy Nó đã được xuất xưởng. ELF không tốt cho Windows. –

+0

Tất nhiên bạn có thể sử dụng một trình biên dịch khác có thể phát ra COFF 64 bit hoặc bất cứ thứ gì bạn cần, có lẽ một trong các trình biên dịch GNU hoặc LLVM? Trình biên dịch BCC v. 5.5 là trình biên dịch miễn phí, tôi đoán vậy? Nó đã được một chút cũ, và không phải là rất chuẩn. –

Trả lời

32

Có. Bạn phải biên dịch các tệp đối tượng "C" thành định dạng COFF. Điều này thường có nghĩa là trình biên dịch Intel và/hoặc MSVC++. Các lưu ý tương tự áp dụng cho liên kết tệp đối tượng 64 bit áp dụng cho 32bit. Bạn phải đảm bảo rằng tất cả các tham chiếu bên ngoài được giải quyết đúng cách, hoặc bằng cách cung cấp một tệp .obj khác có ký hiệu đó hoặc từ mã Delphi. Khi tạo mã "C", hãy đảm bảo bạn vô hiệu hóa bất kỳ kiểm tra ngăn xếp hoặc tạo mã xác minh thời gian chạy khác. Nhiều lần codegen như vậy dựa vào một phiên bản cụ thể của C/C++ RTL từ công cụ đã cho.

Cái gì khác đáng chú ý là trong khi Delphi 64bit có thể liên kết đến các file đối tượng COFF (cuối cùng nó cũng sẽ hỗ trợ ELF64), 32bit Delphi hỗ trợ liên kết với C++ Builder được xây dựng file OMF đối tượng , mới XE2, 32bit Các tệp đối tượng COFF có thể được tạo bằng MSVC++. Các áp dụng tương tự cũng được áp dụng.

+0

Cảm ơn bạn rất nhiều vì đã trả lời Allen, đây chính là điều tôi muốn nghe. Tôi nghĩ rằng cuối cùng tôi sẽ trở lại SA. Một câu hỏi nữa, nếu bạn vui lòng, bạn có biết nếu gcc/mingw tạo ra các đối tượng có thể được Delphi tiêu thụ không? –

+6

Nó cũng đáng nói đến là đơn vị System.Win.Crtl.pas cung cấp hỗ trợ cho liên kết trong nhiều thói quen thời gian chạy C cơ bản cần thiết khi liên kết trong các tệp .obj. Đơn vị này là một phần của gói RTL. Xem nhận xét/tuyên bố từ chối trách nhiệm/cảnh báo trong tệp nguồn trước khi bạn sử dụng. :) –

+1

Giới thiệu về các định dạng OBJ (nếu bạn hỏi tại sao cùng một phần mở rộng tệp có thể có nhiều định dạng), hãy xem http://agner.org/optimize trang web. Nó được cập nhật thường xuyên, chứa rất nhiều tài liệu thú vị, đặc biệt là về 64 bit và nền tảng chéo. Thậm chí còn có một trình chuyển đổi giữa các định dạng COFF/OMF và một số trình giải mã đa nền tảng. –

3

Có, bạn có thể liên kết đến tệp OBJ trong dự án XE2 64 bit, nhưng tệp OBJ phải là mã 64 bit.

+0

Bạn có biết định dạng của các đối tượng cần phải có và trình biên dịch nào có thể tạo ra chúng không? –

+0

@David: Xem câu trả lời của Allen. –

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