Проблема с подключением внешней библиотеки |
Здравствуйте, гость ( Вход | Регистрация )
Проблема с подключением внешней библиотеки |
Vas2 |
3.6.2011, 20:34
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 2.6.2011 Пользователь №: 2715 Спасибо сказали: 0 раз(а) Репутация: 0 |
у меня 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 |
4.6.2011, 9:43
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
тебе на прогорге по-моему уже всё объяснили.
Статически линкуемая библиотека линкуется на этапе компиляции, поэтому руками разрешать её функции не надо. |
|
|
Iron Bug |
5.6.2011, 1:53
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
посмотри namespace'ы. вроде бы портлиб имеет свой namespace.
Сообщение отредактировал Iron Bug - 5.6.2011, 1:55 |
|
|
Vas2 |
5.6.2011, 17:06
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 2.6.2011 Пользователь №: 2715 Спасибо сказали: 0 раз(а) Репутация: 0 |
тебе на прогорге по-моему уже всё объяснили. Статически линкуемая библиотека линкуется на этапе компиляции, поэтому руками разрешать её функции не надо. может я не очень понимаю выражение (разрешать руками): я просто вызываю функции которые находятся в этой библиотеке и соответственно содержатся в хидере h.h. моя прога: status=InstallDriverWithSCManager(); if (status==false) { ... кроме добавки в файл .pro друго кода не добавлял Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php посмотри namespace'ы. вроде бы портлиб имеет свой namespace. как я могу это посмотреть? |
|
|
Litkevich Yuriy |
5.6.2011, 17:26
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php Цитата Итак, создаем пустой проект консольного приложения в VS++ а ты каким компилятором ползуешься?
|
|
|
Vas2 |
5.6.2011, 18:31
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 2.6.2011 Пользователь №: 2715 Спасибо сказали: 0 раз(а) Репутация: 0 |
Библиотеку качал отсюда: 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 |
6.6.2011, 2:24
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 2.6.2011 Пользователь №: 2715 Спасибо сказали: 0 раз(а) Репутация: 0 |
судя по вот этому 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 |
6.6.2011, 6:58
Сообщение
#8
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
если это разные компилеры, то могут быть проблемы
библиотека точно также от vs6 - а она компилится и линкуется !!! вопросы экспорта в основном следующие: несовпадение декорированных имён (если библиотека собрана без def-файла). это либо пересобрать библиотеку с def, либо писать имена функций с "хвостами", как они есть. если библиотека экспортирует классы, то скрестить мелкософт с мингвом, увы, не удастся в принципе. тогда нужно писать доп. библиотеку для msvc, которая будет линковать к себе lib, создавать класс и экспортировать чистые функции, без классов. причём собирать её надо обязательно с .def файлом, т.е. чтобы ничего лишнего там не болталось, никаких хвостов с декорированием. а потом её обрабатывать reimp'ом (причём именно 0.3, ибо 0.4 глючный). либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает. Сообщение отредактировал Iron Bug - 6.6.2011, 7:01 |
|
|
Гость_Гость_Vas2_*_* |
6.6.2011, 16:17
Сообщение
#9
|
Гости |
если это разные компилеры, то могут быть проблемы библиотека точно также от vs6 - а она компилится и линкуется !!! вопросы экспорта в основном следующие: несовпадение декорированных имён (если библиотека собрана без def-файла). это либо пересобрать библиотеку с def, либо писать имена функций с "хвостами", как они есть. если библиотека экспортирует классы, то скрестить мелкософт с мингвом, увы, не удастся в принципе. тогда нужно писать доп. библиотеку для msvc, которая будет линковать к себе lib, создавать класс и экспортировать чистые функции, без классов. причём собирать её надо обязательно с .def файлом, т.е. чтобы ничего лишнего там не болталось, никаких хвостов с декорированием. а потом её обрабатывать reimp'ом (причём именно 0.3, ибо 0.4 глючный). либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает. спасибо за ответ , попробую лучше другой с динамической библиотекой может что толковое выйдет |
|
|
Гость_Гость_Vas2_*_* |
6.6.2011, 17:41
Сообщение
#10
|
Гости |
Цитата(Iron Bug) либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает. а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример) |
|
|
Текстовая версия | Сейчас: 21.12.2024, 20:08 |