Сборка 64-битной DLL с 32-битной MinGW в Eclipse

Я установил 32-разрядную версию Mingw 4.7.2 (с помощью установщика) на 64-разрядную версию Windows 7. Я использую MinGW в проекте Eclipse C++ для создания DLL-файла. Пока все работает.

Однако я использую этот.dll для включения в проект Java через JNI. И когда я вызываю функцию.dll в проекте Java, исключение "Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\path\mylib.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform"брошен Похоже, мне нужно собрать 64-битную версию DLL.

Итак, мои вопросы:

  1. Могу ли я создать 64-битную DLL с MinGW 32-битной или мне нужна 64-битная версия MinGW для этого?
  2. Если да, то как мне настроить параметры MinGW и / или Eclipse?

С уважением Марк

Изменить: Как вы можете видеть в комментарии ниже, я уже пытался установить флаг -m64 для создания 64-битной библиотеки DLL. Это приводит к ошибке: "sorry, unimplemented: 64-bit mode not compiled in", Так есть ли способ запустить 64-битный режим в mingw32.

3 ответа

Решение

Я недавно столкнулся с той же проблемой, установив MinGW-64 версия включена -m64 флаг для меня. Вы можете получить автоматическую сборку отсюда.

РЕДАКТИРОВАТЬ: какой-то парень (rubenvb) сделал хорошую работу в Personal Builds:

Здесь gcc 4.7.4 и даже 4.8.0 здесь.

Вы можете скачать компилятор TDM-GCC с удобной простой установкой Windows с http://tdm-gcc.tdragon.net/.

Затем вы можете выполнить следующее, чтобы сгенерировать файл 64-битного объекта кода C из исходного файла кода 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 

Это должно быть запущено из того же каталога, что и HelloWorld.c, и сгенерирует файл HelloWorld.o в этом каталоге. -m64 делает это 64-битным. Вы можете указать -m32 сделать 32-битный объектный файл и указать -o, чтобы дать вывод, как указано в комментарии выше.

Вы можете установить -m64 переключиться на компиляцию 64-битной библиотеки.

Эти ключи -m поддерживаются в дополнение к описанному выше на процессорах x86-64 в 64-битных средах.

-m32 -m64 -mx32 Создать код для 32-разрядной или 64-разрядной среды. Опция -m32 устанавливает 32-битные типы int, long и pointer и генерирует код, который выполняется в любой системе i386.

Опция -m64 устанавливает для 32-разрядного типа int и long и для типов указателя 64-разрядные значения и генерирует код для архитектуры x86-64. Для Дарвина только опция -m64 также отключает опции -fno-pic и -mdynamic-no-pic.

Опция -mx32 устанавливает 32-битные типы int, long и pointer и генерирует код для архитектуры x86-64.

(источник: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html)

Пример:

32 бит: gcc -m32 -o exmaple32 example.c

64 бит: gcc -m64 -o exmaple64 example.c

(то же самое сg++)

Вы можете установить их в затмении:(right click on your project) -> Properties -> C/C++ Build -> Settings

Другие вопросы по тегам