Название: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Crazy Sage от Июнь 16, 2009, 14:45 Такой вопрос, пытаюсь использовать постгресовскую библиотеку в С++ проекте созданном в борланд билдере.
С помощью implib делаю из .dll .lib, добавляю его в проект, в свои файлы подключаю libpq-fe.h в котором сигнатуры всех функций библиотеки Dll лежит в каталоге куда все компилируется На этапе линковки на каждую функцию из этой библиотеки получаю unresolved extern <имя функции> referenced in <obj файл> В чем моя ошибка? (с dll раньше не работал, может еще отдельно в проекте саму dll надо указать, помимо .lib и ,h) Борланд 6й версии Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 15:00 Цитировать С помощью implib делаю из .dll .lib, добавляю его в проект, в свои файлы подключаю libpq-fe.h в котором сигнатуры всех функций библиотеки А разве так можно из динамической библиотеки сделать статическую? о_ОЦитировать В чем моя ошибка? (с dll раньше не работал, может еще отдельно в проекте саму dll надо указать, помимо .lib и ,h) ну без преобразования может нужно попробовать подключить библиотеку через QLibrary ? (если она динамическая :) ) Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 15:14 хотя, зачем что-то "левое" использовать, если в QT4 есть поддержка PostgreSQL
Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: BRE от Июнь 16, 2009, 15:21 хотя, зачем что-то "левое" использовать, если в QT4 есть поддержка PostgreSQL Я так понял, разговор не про Qt идет... Тема-то в разделе C++.2 Crazy Sage Так а ты указаваешь, что бы .lib линковался с проектом или только .h файлы в свои файлы подключаешь? Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 15:53 Упс! :)
Тада нужно использовать WinAPI для подгрузки библиотеки :) в гугле написать : "использование dll в Builder / Delphi " Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 15:56 или сходить на сайт M$ .. например сюда : http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx
Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: BRE от Июнь 16, 2009, 16:17 Упс! :) :)Тада нужно использовать WinAPI для подгрузки библиотеки :) в гугле написать : "использование dll в Builder / Delphi " kuzulis, а у тебя Qt как собрана, в виде динамической библиотеки? А ты ее в main() подгружаешь, что бы использовать ее функционал? ;) Вот Crazy Sage тоже не хочет libpq руками подгружать. :) Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Crazy Sage от Июнь 16, 2009, 19:05 Я делаю проект->добавить файл и добавляю .lib файл
Полагаю, что это и есть указание, чтобы он линковался с проектом. Просто у меня весь опыт программирования до сих пор под Linux в KDeveloper'е, поэтому с виндовскими библиотеками я пока просто плаваю. Если не разберусь буду конечно подключать библиотеку и выдирать адреса по одной функции, но очень не хочется Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 19:43 Цитировать kuzulis, а у тебя Qt как собрана, в виде динамической библиотеки? ДА! Код: А ты ее в main() подгружаешь, что бы использовать ее функционал? Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 19:52 Цитировать Если не разберусь буду конечно подключать библиотеку и выдирать адреса по одной функции, но очень не хочется Дык есть такие термины как "статическая загрузка динамической библиотеки" и "динамическая загрузка динамической библиотеки"это НЕ линковка! Разница в том , что при статической загрузке - она грузится вся при старте приложения.. и если её (библиотеки) вдруг не оказалось в путях её поиска - то приложение завершится с ошибкой.. а если динамически грузить - то там в нужный момент идет подгрузка и выгрузка!!! Но это все относится к ДИНАМИЧЕСКИМ библиотекам ( ИМХО в силу моей осведомленности) :) А статическая линковка работает ТОЛЬКО для статических библиотек!!! :) И код библы прилинковывается в исполняемый файл приложения! И я первый раз слышу - что можно преобразовать динамическую библиотеку в ситатическую !! О_о Это невозможно! :) Не верю! А как я понимаю - постгресс. dll - есть ДИНАМИЧЕСКАЯ БИБЛИОТЕКА - и значит работать с ней нужно как с ДИНАМИЧЕСКОЙ! 2 Crazy Sage , ты поройся в гугле все-таки.. для дельфей/билдера - есть много примеров как грузить динамическую библу! :) .. и моё ИМХО - не стоит её конвертить в *.lib Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Crazy Sage от Июнь 16, 2009, 19:55 Насколько я понимаю, .lib в данной ситуации является библиотекой-заглушкой, которая автоматически подключает и вытаскивает все функции из .dll-ки
Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 20:06 Зачем?
Статически (неявно) грузиш свою *.dll и все!!! вот пример кода неявной загрузки на делфях .. (думаю в билдере разницы не много будет) Код: ... Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Crazy Sage от Июнь 16, 2009, 20:08 Единственный имеющийся у меня пример на C++ посложнее, там на каждую функцию пишется по 3-4-5 строчек.
Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Rcus от Июнь 16, 2009, 20:23 Это все интересно, но, кажется, безсполезно. В дистрибутиве постгреса есть мейкфайл для сборки libpq при помощи bcc в любом виде.
Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Crazy Sage от Июнь 16, 2009, 20:26 Ну есть, собирает он собственно те же самые .lib и .dll
Впрочем у меня и их не собирает, ругается на то, что я ему не передаю ключ -N (который я ему передаю) Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: Rcus от Июнь 16, 2009, 20:31 Блин, надоело гадать. Давайте файл проекта и полный вывод компилятора.
Название: Re: Использование libpq.dll (PostgreSQL API) в Borland С++ Builder Отправлено: kuzulis от Июнь 16, 2009, 20:43 2 Crazy Sage,
в общем так.. у тебя имеется : libpq.dll и libpq-fe.h в котором описаны прототипы ф-ций, имеющихся в дллке.. теперь делаешь так: 1. чтобы проверить, действительно ли они в ней есть - в тоталкоммандере выделяеш свою дллку и жмакаеш F3 - запустится плагин тотала и в нем ты увидиш все имена экспортируемых (расшаренных) в дллке функций. 2. создаешь какой нить свой заголовочный файл myheader.h в котором описываешь НУЖНЫЕ ТЕБЕ функции.. чтобы узнать как они выглядят - смотриш прилагаемый заголовочник libpq-fe.h и выписываеш (копипастиш) из него нужные тебе ф-ции в свой myheader.h типа так: Код: .... 3. подключаешь СВОЙ заголовник myheader.h в твое приложение и используеш ф-ции func1 и func2 в своем приложении... при этом заголовник libpq-fe.h нафик не нужен :) 4. собираешь свое приложение и работай на здоровье.. идея вот такая :) |