Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с подключением внешней библиотеки
Форум на CrossPlatform.RU > Библиотеки > Другие библиотеки
Vas2
у меня Qt creator 2.0.1, основан на 4.7, WinXP, minGW
подключил 2 библиотеки P100X.lib, PortLib.lib
в файле .pro
LIBS += P100X.lib
LIBS += PortLib.lib

обе библиотеки он находит (проверено изменением имени), обе находятся в одном и томже каталоге программы
фунукции библиотеки P100X.lib находит , а функции библиотеки PortLib.lib не находит, пишет ошибку: undefined reference to 'имя функции'
особенности: библиотека P100X.lib содержит в себе запросы к библиотеки P100X.dll, а библиотека PortLib.lib полность статическая
библиотека PortLib.lib имеет свой хидер (.h) не совпадающий с именем библиотеки (пробовал вручную создавать совпадающее имя) - библ не мои
Вопрос: чтоже всетаки можно попробовать чтобы использовать функции из 2-ой библиотеки??? За любой ответ буду очень признателен
Litkevich Yuriy
тебе на прогорге по-моему уже всё объяснили.

Статически линкуемая библиотека линкуется на этапе компиляции, поэтому руками разрешать её функции не надо.
Iron Bug
посмотри namespace'ы. вроде бы портлиб имеет свой namespace.
Vas2
Цитата(Litkevich Yuriy @ 4.6.2011, 10:43) *
тебе на прогорге по-моему уже всё объяснили.

Статически линкуемая библиотека линкуется на этапе компиляции, поэтому руками разрешать её функции не надо.



может я не очень понимаю выражение (разрешать руками): я просто вызываю функции которые находятся в этой библиотеке и соответственно содержатся в хидере h.h.
моя прога:
status=InstallDriverWithSCManager();
if (status==false)
{ ...
кроме добавки в файл .pro друго кода не добавлял

Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php

Цитата(Iron Bug @ 5.6.2011, 2:53) *
посмотри namespace'ы. вроде бы портлиб имеет свой namespace.


как я могу это посмотреть?
Litkevich Yuriy
Цитата(Vas2 @ 5.6.2011, 20:06) *
Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php
Цитата
Итак, создаем пустой проект консольного приложения в VS++
а ты каким компилятором ползуешься?
Vas2
Цитата(Litkevich Yuriy @ 5.6.2011, 18:26) *
Цитата(Vas2 @ 5.6.2011, 20:06) *
Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php
Цитата
Итак, создаем пустой проект консольного приложения в VS++
а ты каким компилятором ползуешься?


компилятором minGW, и что библиотека скомпанованная vs6 не подойдет для линковщика minGW? предыдуще указанная библиотека точно также от vs6 - а она компилится и линкуется !!!
предыдуще указанная библиотека, качал здесь http://ftp.icpdas.com.tw/pub/cd/iocard/pci...2/dll_ocx/demo/ " dll_vc6_070314.exe "
Vas2
судя по вот этому http://forum.swamp.ru/viewtopic.php?p=1933292 сообщение от: Чт Фев 04, 2010 11:08 am
можно применить утилиту reimp.exe для преобразования
у меня в утилитах компилятора ее нет, скачал отдельно из архива mingw-utils-0.3.tar.gz но все равно ничего не выходит
в файле документации нашел такие строки:
Раскрывающийся текст
If an input library contain regular objects (non-imports, i.e code and data) `reimp' will write out those objects unless you specify one of
the `--only-def' and `--dump-symbols' options. You probably want to include those objects as well in the generated library. `reimp'
doesn't do that automatically so you have to do it manually using `ar', like this
reimp imp.lib # this generates several .o or .obj files.
ar rcs libimp.a *.obj # add them to library

подставил свою библиотеку, после нее выходит файл с именем "0" чуть меньшего размера и файл в 2.5 раза меньше изначальной библиотеки, но он все равно не подходит!!!
есть утилита ranlib - но чем отличаются и как работает невыяснил, может кто подскажет чего?
или может этот файл .а я в неправильное место поставил (у меня он был тут С:Qt\2010.05\mingw\lib, в принципе в файл проекта я его тоже пробовал ложить)
Iron Bug
если это разные компилеры, то могут быть проблемы
Цитата(Vas2 @ 5.6.2011, 20:31) *
библиотека точно также от vs6 - а она компилится и линкуется !!!

вопросы экспорта в основном следующие:
несовпадение декорированных имён (если библиотека собрана без def-файла). это либо пересобрать библиотеку с def, либо писать имена функций с "хвостами", как они есть.
если библиотека экспортирует классы, то скрестить мелкософт с мингвом, увы, не удастся в принципе. тогда нужно писать доп. библиотеку для msvc, которая будет линковать к себе lib, создавать класс и экспортировать чистые функции, без классов. причём собирать её надо обязательно с .def файлом, т.е. чтобы ничего лишнего там не болталось, никаких хвостов с декорированием. а потом её обрабатывать reimp'ом (причём именно 0.3, ибо 0.4 глючный).
либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает.
Гость_Vas2_*
Цитата(Iron Bug @ 6.6.2011, 6:58) *
если это разные компилеры, то могут быть проблемы
Цитата(Vas2 @ 5.6.2011, 20:31) *
библиотека точно также от vs6 - а она компилится и линкуется !!!

вопросы экспорта в основном следующие:
несовпадение декорированных имён (если библиотека собрана без def-файла). это либо пересобрать библиотеку с def, либо писать имена функций с "хвостами", как они есть.
если библиотека экспортирует классы, то скрестить мелкософт с мингвом, увы, не удастся в принципе. тогда нужно писать доп. библиотеку для msvc, которая будет линковать к себе lib, создавать класс и экспортировать чистые функции, без классов. причём собирать её надо обязательно с .def файлом, т.е. чтобы ничего лишнего там не болталось, никаких хвостов с декорированием. а потом её обрабатывать reimp'ом (причём именно 0.3, ибо 0.4 глючный).
либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает.

спасибо за ответ , попробую лучше другой с динамической библиотекой может что толковое выйдет
Гость_Vas2_*
Цитата(Iron Bug)
либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает.


а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример)
Litkevich Yuriy
Если используешь Qt, то смотри QLibrary, в противном случае смотри тут
Iron Bug
Цитата(Гость_Гость_Vas2_*_* @ 6.6.2011, 20:41) *
а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример)

это не отдельный метод, а вместе с предыдушим: пишем отдельную библиотеку, экспортируем функции через def, а вот уже к ней цепляемся не через линковку экспортированного lib'а, а динамически, через LoadLibrary и иже с ним. в чём плюсы? в мобильности таких конструкций. библиотека может содержать базовые функции, плюс-минус нечто, что потребуется кому-то ещё, например. а в конкретном модуле подцепляются только нужные библиотеки. на самом деле, lib делает то же самое, просто у него там прописываются все функции, а это не всегда нужно и не всегда так удобно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.