2013-06-06 17 views
7

Zainstalowałem 32-bitową wersję Mingw 4.7.2 (przy użyciu instalatora) na moim Windows 7 64-bitowym. Używam MinGW w projekcie Eclipse C++ w celu zbudowania pliku .dll. Jak dotąd wszystko działa.Budynek 64-bitowy dll z MinGW 32-bitowym w Eclipse

Jednak używam tego pliku .dll do dołączenia do projektu java przez JNI. A kiedy wywołuję funkcję .dll w projekcie java, generowany jest wyjątek "Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\path\mylib.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform" . Wygląda na to, że potrzebuję zbudować 64-bitową wersję biblioteki DLL.

Więc moje pytania to:

  1. mogę zbudować DLL 64 bitowej z MinGW 32- lub muszę się bitową wersję dla że MinGW 64?
  2. Jeśli tak, to w jaki sposób muszę dostosować ustawienia MinGW i/lub Eclipse, aby to zrobić?

Pozdrawiam Marc

Edit: Jak widać na poniższym komentarzu, ja już próbowałem ustawić -m64 Flag zbudować dll 64 bitów. Powoduje to błąd: "sorry, unimplemented: 64-bit mode not compiled in". Czy istnieje sposób na uruchomienie trybu 64-bitowego w mingw32.

Odpowiedz

7

Niedawno w obliczu tego samego problemu, zainstalowanie wersji MinGW-64 włączona flagę -m64 dla mnie. Możesz uzyskać automatyczną kompilację z here.

EDIT: Jakiś facet (rubenvb) wykonane jakąś dobrą pracę w Personal Builds:

tam gcc 4.7.4 here a nawet 4.8.0 here.

+0

Zgadzam się, jeśli mingw go nie obsługuje, zrobi to mingw-w64. +1 dla bezpośredniego linku. – ollo

+0

Btw. czy istnieje już 4.7.2? Pobieranie odbywa się w wersji 4.7.0. – ollo

+2

Tak, jest. Edytowałem swoją odpowiedź ... –

1

Można ustawić przełącznik -m64, aby skompilować bibliotekę 64-bitową.

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.

(źródło: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html)

przykład:

32 bitów:gcc -m32 -o exmaple32 example.c

64 bitów:gcc -m64 -o exmaple64 example.c

(samo g++)

Można ustawić je w Eclipse: (right click on your project) -> Properties -> C/C++ Build -> Settings

+0

Dziękuję za odpowiedź, próbowałem, ale kiedy chcę zbudować, pojawia się błąd: "przepraszam, niezatwierdzony: tryb 64-bitowy nie został skompilowany". Czy istnieje sposób na uruchomienie trybu 64-bitowego z mingw32? – Marc

+2

Rozumiem, ale można użyć 64-bitowego widelca Mingw: MinGW-w64. Oto oficjalna strona: http://mingw-w64.sourceforge.net/. Ale Golgauth opublikował już link do pobrania. – ollo

5

Możesz pobrać kompilator TDM-GCC z ładną prostą instalacją systemu Windows z http://tdm-gcc.tdragon.net/.

Następnie można uruchomić następujące czynności w celu wygenerowania 64-bitowego pliku obiektu kodu C z pliku źródłowego kodu 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 

ten powinien być prowadzony z tego samego katalogu co HelloWorld.c i wygeneruje plik HelloWorld.o w tym katalogu. The -m64 sprawia, że ​​jest 64-bitowy. Można podać wartość -m32, aby utworzyć 32-bitowy plik obiektowy i określić wartość -o, aby uzyskać dane wyjściowe wymienione w powyższym komentarzu.