crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Проблема с подключением внешней библиотеки
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Iron Bug Дата 6.6.2011, 23:03
 
Цитата(Гость_Гость_Vas2_*_* @ 6.6.2011, 20:41) *
а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример)

это не отдельный метод, а вместе с предыдушим: пишем отдельную библиотеку, экспортируем функции через def, а вот уже к ней цепляемся не через линковку экспортированного lib'а, а динамически, через LoadLibrary и иже с ним. в чём плюсы? в мобильности таких конструкций. библиотека может содержать базовые функции, плюс-минус нечто, что потребуется кому-то ещё, например. а в конкретном модуле подцепляются только нужные библиотеки. на самом деле, lib делает то же самое, просто у него там прописываются все функции, а это не всегда нужно и не всегда так удобно.
Litkevich Yuriy Дата 6.6.2011, 18:31
  Если используешь Qt, то смотри QLibrary, в противном случае смотри тут
Гость_Vas2_* Дата 6.6.2011, 17:41
 
Цитата(Iron Bug)
либо юзать её через LoadLibrary(без .lib). я так делала, у меня работает.


а можно по подобнее про этот метод (еще лучьше какой-нибудь банальный пример)
Гость_Vas2_* Дата 6.6.2011, 16:17
 
Цитата(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). я так делала, у меня работает.

спасибо за ответ , попробую лучше другой с динамической библиотекой может что толковое выйдет
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 Дата 6.6.2011, 2:24
  судя по вот этому 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, в принципе в файл проекта я его тоже пробовал ложить)
Vas2 Дата 5.6.2011, 18:31
 
Цитата(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 "
Litkevich Yuriy Дата 5.6.2011, 17:26
 
Цитата(Vas2 @ 5.6.2011, 20:06) *
Библиотеку качал отсюда: http://www.pcports.ru/articles/4.php
Цитата
Итак, создаем пустой проект консольного приложения в VS++
а ты каким компилятором ползуешься?
Vas2 Дата 5.6.2011, 17:06
 
Цитата(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.


как я могу это посмотреть?
Iron Bug Дата 5.6.2011, 1:53
  посмотри namespace'ы. вроде бы портлиб имеет свой namespace.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 2:00