LINUX.ORG.RU

MinGW-w64 на шинде отказывается распознавать библиотеки в папке проекта.

 , , ,


0

1

имеется проект который отказывается линковаться на шинде...
ошибка говорит, что не находятся библиотеки для линковки. Если вконце названия библиотек убрать суффикс (вместо libatk-1.0-0.dll сделать libatk-1.0.dll), то библиотека находится при сборке, но отказывается находиться при запуске скомпилированной проги — надо подсовывать с ентими суффиксами.
однако эти же библиотеки с такими же названиями (с ентими же суффиксами) успешно находятся если установить их с помощью msys2.
как сделать магию которую делает msys2 по поиску названий?

вначале устанавливаю msys2, потом в нем ставлю тулчейн mingw.
версия mingw-w64_x86_64 устанавливается 10.1.0

апд... — тему можно воспринимать как вопрос о том, как собрать прогу под шиндой с линковкой для gtkmm3 и sdl2_mixer, с применением cmake?

ответ тут
и тут

★★

Ответ на: комментарий от curufinwe

а где связь тут с суффиксами? — я проверял на линуксе у mingw пакетов либ в cmake файлах нету ничо про суффиксы...
да и список либ у меня статичный в файле


апд. и да — библиотеки то не подхватывает уже линкер... — не распознает файлы с суффиксами

safocl ★★ ()
Последнее исправление: safocl (всего исправлений: 1)
Ответ на: комментарий от safocl

В пакетах msys2 есть lib*.dll.a файлы, и у них имя как раз без суффикса. Видимо при линковке используются они, в них и магия.

Вот тут про их назначение

https://stackoverflow.com/questions/13998575/mingw-creating-dll-a-files-what-type-of-library-files-are-those

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

нет, там линкуется динамически — ldd потом показывает с чем слинковано — если есть либа в папке bin или lib проекта — то линкуется с ней, если нет, то уже ищет в системных папках.

safocl ★★ ()

В винде фишка - линковаться надо с «типа статической» библиотекой, а не напрямую с dll, а если надо с dll - то через «статическую» обертку, которая *.dll.a.

В MSVS вместо .a файлы .lib, и точно так же надо для линковки с dll иметь .lib обертку.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

возможно мне задуматься о статической линковке — я до сих пор не понимаю — как cmake указать как линковать? или он просто топорно понимает файлы которые надо слинковать по имени? если надо статик линк — то просто названия либ для линковки надо вписывать соответствующие?

safocl ★★ ()
Ответ на: комментарий от safocl

если надо статик линк — то просто названия либ для линковки надо вписывать соответствующие?

Да, надо названия с .a.

Если в msys2 нужные пакеты есть, проще поставить библиотеки оттуда и должно и с dll все слинковаться нормально.

curufinwe ★★★★★ ()
Ответ на: комментарий от safocl

но только мне хочется что бы было все в проекте — все либы которые на винду ставятся через опку

Да, я так и понял. Тогда действительно стоит попробовать статически.

curufinwe ★★★★★ ()
Ответ на: комментарий от curufinwe

скачал девелоп-либу sdl2 для винды с офф сайта — тут тоже идут прямый либы
сча запущу виртуалку и на ней гляну чо там ставится в msys2 — но енто огромный грех заставляешь меня делать.

safocl ★★ ()

Нужны библиотеки импорта. В MinGW это .dll.a файлы, в MSVC++ - .lib.

В Windows - С, C++ и подобные языки - не линкуются с DLL напрямую, они линкуются с библиотеками импорта, которые создают в конечном объектном файле таблицу импорта, которую уже во время загрузки DLL в программу патчит динамический линковщик винды(ядро).

lovesan ★★ ()
Ответ на: комментарий от lovesan

интереснае высказывание — только я не особо хочу даже вникать в виндодельное программирование... просто решил чо неплохо было бы сделать свою прогу кроссплатформенной — как раз и опыт такого появился...

safocl ★★ ()