версия библиотеки 32 bit

RosV
Сообщения: 8
Зарегистрирован: 18 окт 2020, 10:20

версия библиотеки 32 bit

Сообщение RosV »

Здравствуйте, подскажите, пожалуйста, как создать рабочую версию 32 бит, Флаги [-m32] в среде CodeBlocks, в разделе Settings/Compiler не помогают, точнее библиотека компилируется и создаётся без ошибок, но при попытке открытия её в среде Visual Studio LoadLibrary(...) даёт нулевой указатель, 64 бит версия открывается нормально.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: версия библиотеки 32 bit

Сообщение Бахурин Сергей »

я не понял вопрос. Вы хотите собрать 32 битную версию и прилинковать в 64-битное приложение? Или приложение тоже 32 битное? Раньше я собирал 32 битные версии при использовании 32 битного компилятора в 32 битной системе, и они линковались нормально. Но честно говоря не пробовал линковать 32 битные версии библиотек в 64 битной системе и я не уверен что это возможно прилинковать 32 битную библиотеку в 64 битное приложение.

RosV
Сообщения: 8
Зарегистрирован: 18 окт 2020, 10:20

Re: версия библиотеки 32 bit

Сообщение RosV »

Я хочу прилинковать к приложению 32 бит библиотеку 32 бит - не получается, даже при использовании в CodeBlocks флага [-m32] в разделе Settings/Compiler, при этом не только моё приложение не загружает библиотеку, но и тестовые примеры из папки \examples\bin не работают.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: версия библиотеки 32 bit

Сообщение Бахурин Сергей »

Все зависит от вашей операционной системы и используемого компилятора.
Если вы используете 64 битную систему и компилятор mingw64 (тоже 64 битный) то все примеры \examples\bin будут собраны как 64 битные (они собираются без флага -m32 мэйкфайлом. В этом случае они не будут ничего ликновать, т.к. они 64 битный, а dll -32 бита.

Если у вас 32 битная система и 32 битный компилятор mingw32, то совместимость будет нормальной, т.к. все будет собрано под 32 бита (собственно у меня так и работает на 32 битной машине).

Итак если вы хотите чтобы длл линковалась, надо собрать все примеры тоже с флагом -m32. хотя я так никогда не делал не могу сказать будет это работать или нет.

PS а можно поинтересоваться, зачем вы собираете в 64 битной системе 32 битную dll?

RosV
Сообщения: 8
Зарегистрирован: 18 окт 2020, 10:20

Re: версия библиотеки 32 bit

Сообщение RosV »

У меня есть проект 32 бит под машины 32 бит, хочу использовать в нём библиотеку. Про примеры я понял, спасибо. Правильно ли делаю: выставляю флаг -m32 в меню Settings/Compiler среды CodeBlocks и собираю библиотеку (имеется в виду, больше нигде нет необходимости выставлять "галочки"), затем готовый dll использую её в своём проекте. Но так не получается(. Может попробовать mingw32?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: версия библиотеки 32 bit

Сообщение Бахурин Сергей »

Вот собрал dll в 32 битной системе. Попробуйте ее прилинковать в вашем приложении.
_release.zip
(211.73 КБ) 184 скачивания

RosV
Сообщения: 8
Зарегистрирован: 18 окт 2020, 10:20

Re: версия библиотеки 32 bit

Сообщение RosV »

Спасибо, большое. Вы меня чуть опередили. Всё-тфки получилось собрать 32-х разрядную версию. Напишу алгоритм действий:
1) необходимо скачать архив minGW для 32 битных систем, например i686-8.1.0-release-win32-sjlj-rt_v6-rev0.7z
2)распаковать по пути, куда установлены инструменты из ссылки https://ru.dsplib.org/dspl/getting_star ... locks.html, например c:\dsplib\mingw32\, при этом можно переименовать папку mingw64, чтобы не мешала.
3)настроить среду CodeBlocks по предыдущей ссылке на работу с toolchain из распакованного архива.
4)собрать библиотеку.
5) скопировать готовую библиотеку libdspl.dll, libgcc_s_sjlj-1.dll, libquadmath-0.dll в папку со своим проектом. Файлы libgcc_s_sjlj-1.dll, libquadmath-0.dll находятся c:\dsplib\mingw32\bin
Примечание: если не выполнять вышеперечисленные шаги и собирать библиотеку с флагом [-m32], то библиотека собирается, а файлы libgcc_s_sjlj-1.dll, libquadmath-0.dll, расположенные в папке migw64\bin остаются 64 разрядные. Из-за этого библиотека через LoadLobrary(...) не откроется.

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: версия библиотеки 32 bit

Сообщение Бахурин Сергей »

Да видимо так и есть.

Ответить