24|undefined reference to `__imp_SaveDC'|

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Пишет ошибку
24|undefined reference to `__imp_SaveDC'|
, при подключении C:\CodeBlocks\mingw64\x86_64-w64-mingw32\lib\libgdi32.a ошибка меняется на
|23|undefined reference to `_Unwind_Resume'|
, но в той же строке. Как с этим бороться? Можно ли GDI32.dll загрузить явно и без статических либ? Как? Как её потом закрыть?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Din666
Сообщения: 52
Зарегистрирован: 17 июл 2015, 13:25
Откуда: Moscow
Контактная информация:

imp говорит о том что imported то есть с динамики (DLL)
GeorgeSoca
Сообщения: 95
Зарегистрирован: 12 окт 2015, 04:09
Откуда: Guam
Контактная информация:

On our web, you can feel safe! Besides we use mirrored hard drives on all of our servers so we also take backup twice a day on separate servers. We use ISPmanager as the control panel. ISPmanager is a control panel that makes it easy to administer its Web site. With us you can place as many websites and domains you wish for a hosting account.
virtual hosting
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Din666 писал(а):imp говорит о том что imported то есть с динамики (DLL)
Читаем мой пост:
Сионист писал(а):GDI32.dll
. Много думаем.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Походу, почитать нужно именно тебе, Сионист. Вопрос некорректен в принципе. Залинковать "напрямую" dll мы не можем никак. В любом случае нам нужна так называемая интерфейсная статитеческая библиотека, которая содержит функции с префиксом imp_, которые просто делигируют вызов в соответствующие функции без префикса imp, расположенные в dll.

Теперь по поводу самой ошибки. Возвращаемся к вопросу об использовании поисковика. Запускаем гугл и пишем в нём "_Unwind_Resume mingw". Гугл выдаёт добрый десяток ссылок, где знающие люди говорят об одном и том же - вы используете версию компилятора не с тем ABI. К примеру, вот первая ссылка, где чёрным по белому написано, что линковка осуществляется с либой, собранной другой версией компилятора, либо вообще другим компилятором, после чего человек, который задавал вопрос, пишет, что действительно решил проблему, пересобрав загружаемую библиотеку своим компилятором (благо исходники были в наличии).

Я намеренно не отвечал на твой первоначальный пост, так как ещё тогда в начале сентября, я вбил в поисковик запрос, прочитал ответ и решил, что нужно дать тебе возможность повариться в собственном соку и всё-таки дойти самому до такого простого решения, как использование поисковика. Тем более при том, что работу с поисковиком мы обсуждали уже неоднократно в соседних темах. Оказалось, мои надежды были необоснованны, а все усилия по попыткам привить умение пользоваться гуглом тщетными.

Конкретно по проблеме. Переустанови MinGW. В предыдущей теме я уже предлагал это сделать. Воспользуйся утилитой mingw-get-setup, чтобы не мучиться с вопросом о том, какие пакейджи нужны, а какие нет - дефолтный набор пакейджей, которые вытаскивает утилита, покрывает большинство нужд.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Походу, почитать нужно именно тебе, Сионист.
Ага. Ответы. Но то, что библиотека GDI32 - динамическая, уже указано в моём посте. Так что указывать на это не нужно. Так что некоторым не мешало бы для начала прочитать вопрос.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Вопрос некорректен в принципе. Залинковать "напрямую"
Где у меня хоть слово о прямой? Я спрашивал только об отказе от статических библиотек импорта. И что Вы понимаете под прямой? Я чего то этого не понял.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а): В любом случае нам нужна так называемая интерфейсная статитеческая библиотека, которая содержит функции с префиксом imp_, которые просто делигируют вызов в соответствующие функции без префикса imp, расположенные в dll.
Ваще то не в любом, я надыбал решение: самому объявить нужные указатели и присвоить их с помощью GetProcAdress, либу загрузить явно с помощью LoadLibrary и FreeLibrary явно её освободить.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист писал(а):Где у меня хоть слово о прямой?
Вот:
Сионист писал(а):Можно ли GDI32.dll загрузить явно и без статических либ?
Сионист писал(а):Я спрашивал только об отказе от статических библиотек импорта. И что Вы понимаете под прямой? Я чего то этого не понял.
Нет, ты спрашивал именно о явной загрузке DLL. Слова "явно" и "напрямую" ведь синонимы, или я неправ? Или ты можешь сейчас напрячься и придумать явную, но не прямую загрузку DLL? Господи, как же мне надоела игра в "да, я ляпнул глупость, но это не важно, а важно то, что я под этой глупостью не одну глупость подразумевал, а другую"... Да просто прямо скажи, что сморозил глупость и пойдём дальше. Разговор будет куда более продуктивным тогда.

Господа, ещё раз, специально для тех, кто не понимает, как работает линкер. Загрузить DLL напрямую без статической либы нельзя никак! В любом случае нужна или полноценная статическая библиотека с имплеменатацией, или интерфейсная статическая библиотека с функциями-делегатами, если у нас есть DLL. Причина очень проста: линкер ничего не знает ни о каких DLL и умеет работать только с либками.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Слова "явно" и "напрямую" ведь синонимы, или я неправ?
Также как "машина" и "чёрная".
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить