2013-06-06 61 views
7

Tôi đã cài đặt phiên bản 32 bit của Mingw 4.7.2 (sử dụng trình cài đặt) trên Windows 7 64 bit của mình. Tôi sử dụng MinGW trong một dự án Eclipse C++ để xây dựng một tệp .dll. Cho đến nay mọi thứ đều hoạt động.Xây dựng dll 64 bit với MinGW 32 bit trong Eclipse

Tuy nhiên tôi sử dụng .dll này để được đưa vào dự án java qua JNI. Và khi tôi gọi một hàm của .dll trong dự án java, ngoại lệ "Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\path\mylib.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform" được ném. Vì vậy, có vẻ như tôi cần phải xây dựng một phiên bản 64 bit của DLL.

Vì vậy, câu hỏi của tôi là:

  1. Tôi có thể xây dựng một DLL 64 bit với MinGW 32 bit hay tôi cần phiên bản MinGW 64 bit cho điều đó?
  2. Nếu có, tôi cần điều chỉnh MinGW và/hoặc Cài đặt Eclipse để làm như thế nào?

Trân Marc

Edit: Như bạn có thể thấy trong những nhận xét dưới đây, tôi đã cố gắng để thiết lập Cờ -m64 để xây dựng một dll 64 bit. Điều này dẫn đến lỗi: "sorry, unimplemented: 64-bit mode not compiled in". Vì vậy, có một cách để có được chế độ 64 bit chạy trong mingw32.

Trả lời

7

Gần đây tôi đã phải đối mặt với cùng một vấn đề, cài đặt phiên bản MinGW-64 kích hoạt các -m64 cờ cho tôi. Bạn có thể nhận được một bản dựng tự động từ here.

EDIT: Một số anh chàng (rubenvb) thực hiện một số công việc tốt trong Personal Builds:

Có gcc 4.7.4 here và thậm chí 4.8.0 here.

+0

Đồng ý, nếu mingw không hỗ trợ nó, mingw-w64 sẽ làm. 1 cho liên kết trực tiếp. – ollo

+0

Btw. đã có 4.7.2 chưa? Tải xuống là 4.7.0. – ollo

+2

Có. Tôi đã chỉnh sửa câu trả lời của mình ... –

1

Bạn có thể đặt chuyển đổi -m64 để biên dịch lib 64 bit.

These ‘-m’ switches are supported in addition to the above on x86-64 processors in 64-bit environments.

-m32 -m64 -mx32 Generate code for a 32-bit or 64-bit environment. The -m32 option sets int, long, and pointer types to 32 bits, and generates code that runs on any i386 system.

The -m64 option sets int to 32 bits and long and pointer types to 64 bits, and generates code for the x86-64 architecture. For Darwin only the -m64 option also turns off the -fno-pic and -mdynamic-no-pic options.

The -mx32 option sets int, long, and pointer types to 32 bits, and generates code for the x86-64 architecture.

(nguồn: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html)

Ví dụ:

32 Bit:gcc -m32 -o exmaple32 example.c

64 Bit:gcc -m64 -o exmaple64 example.c

(cùng với g++)

Bạn có thể đặt chúng trong nhật thực: (right click on your project) -> Properties -> C/C++ Build -> Settings

+0

Cảm ơn bạn đã trả lời, tôi đã thử điều đó, nhưng khi tôi muốn xây dựng, tôi nhận được lỗi: "xin lỗi, chưa thực hiện: chế độ 64 bit không được biên dịch trong". Vì vậy, có cách nào để có được chế độ 64 bit chạy với mingw32? – Marc

+2

Tôi thấy, nhưng bạn có thể sử dụng nhánh 64 bit của Mingw: MinGW-w64. Đây là trang web chính thức: http://mingw-w64.sourceforge.net/. Nhưng Golgauth đã đăng liên kết tải xuống. – ollo

5

Bạn có thể tải xuống trình biên dịch TDM-GCC với cài đặt Windows dễ dàng dễ dàng từ http://tdm-gcc.tdragon.net/.

Sau đó, bạn có thể chạy phần sau để tạo tệp đối tượng mã C 64 bit từ tệp mã nguồn C HelloWorld.c.

"C:\MinGW64\bin\gcc.exe" -m64 -c -I"C:\Program Files\Java\jdk1.6.0_26\include" -I"C:\Program Files\Java\jdk1.6.0_26\include\win32" HelloWorld.c 

Điều này sẽ được chạy từ cùng thư mục với HelloWorld.c và sẽ tạo tệp HelloWorld.o trong thư mục đó. Các -m64 làm cho nó 64 bit. Bạn có thể chỉ định -m32 để tạo một tệp đối tượng 32 bit và chỉ định -o, để cung cấp cho đầu ra như được đề cập trong nhận xét ở trên.

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