Сборка 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.
Итак, мои вопросы:
- Могу ли я создать 64-битную DLL с MinGW 32-битной или мне нужна 64-битная версия MinGW для этого?
- Если да, то как мне настроить параметры MinGW и / или Eclipse?
С уважением Марк
Изменить: Как вы можете видеть в комментарии ниже, я уже пытался установить флаг -m64 для создания 64-битной библиотеки DLL. Это приводит к ошибке: "sorry, unimplemented: 64-bit mode not compiled in"
, Так есть ли способ запустить 64-битный режим в mingw32.
3 ответа
Вы можете скачать компилятор 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