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?

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

★★

Последнее исправление: safocl (всего исправлений: 4)

Msys2 же ставит и библиотеки, и пакеты для cmake, по которым видимо у вас все и подхватывается.

curufinwe ★★★★★
()
Ответ на: комментарий от 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

нет, там линкуется динамически — ldd потом показывает с чем слинковано

Понятно, но этот dll.a указывает на нужную dll. А он как раз без суффикса идет.

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

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

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

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

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

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

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

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

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

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

Я не берусь утверждать точно, но я думаю что на линуксе линкер - это приложение линукса, хоть он и кросс*, поэтому он работает несколько иначе.

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

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

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

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

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

или ты думаешь что енти dll.a файлы просто обычные динамические либы?

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

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

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

ок — спс за многообещающий вектор.

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

все ок — спс за разъяснения — теперь все линкуется...
в папку lib надо отправлять .dll.a файлы, а в папку bin .dll файлы — и указывать линкеру именно папку lib

safocl ★★
() автор топика

в папке

А в мамке?

anonymous
()

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

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

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

Вообще, показательный пример почему надо с основ начинать. А то надрочатся на бидонах, и основ не знают. Все что уровнем ОС - магия.

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

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

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

Если бы это было так, то ты бы сделал фзе-сфсру ыуфкср ьштпц

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

Чтобы писать кроссплатформенные приложения, нужно во-первых и в главных, понимать особенности этих самых платформ, под которые пишешь

lovesan ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.