Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt, Linux] Qlibrary, Непонятки с библиотекой 
:(
    Опции темы
dix75
Дата 3.2.2010, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



Доброй ночи!
Непонятки с  Qlibrary.

Вот простой пример
Код

 typedef bool (*MyPrototype)();
 MyPrototype myFunction =    (MyPrototype) QLibrary::resolve("St001ng", "is_exists");
 if (myFunction) qDebug()<<"Ey";


Почему-то я не могу подключить эту библиотеку.
Странно что получаются 4 файла 
libSt001ng.so                19Б
libSt001ng.so.1             19Б
libSt001ng.so.1.0          19Б
libSt001ng.so.1.0.0       86КБ

Я предположил, что библиотека это "libSt001ng.so.1.0.0"
переименовал в libSt001ng.so
а потом в              St001ng.so
а потом в              St001ng
и др.

И все равно  не видит и все тут

функция библиотеки
Код

extern "C" bool                     is_exists()                                 { return true; }

Странно немогу понять в чем дело


--------------------
save your mind
PM MAIL   Вверх
andrew_121
Дата 3.2.2010, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(dix75 @  3.2.2010,  01:19 Найти цитируемый пост)
libSt001ng.so                19Б
libSt001ng.so.1             19Б
libSt001ng.so.1.0          19Б
libSt001ng.so.1.0.0       86КБ

библиотека - последняя. остальное симлинки.

выполните следующее:
Цитата

readelf -s libSt001ng.so | grep is_exists

и покажите результат.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
dix75
Дата 3.2.2010, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



Цитата(andrew_121 @  3.2.2010,  01:57 Найти цитируемый пост)
библиотека - последняя. остальное симлинки.

А что такое симлинки?



--------------------
save your mind
PM MAIL   Вверх
ecspertiza
Дата 3.2.2010, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Цитата(dix75 @ 3.2.2010,  08:34)
Цитата(andrew_121 @  3.2.2010,  01:57 Найти цитируемый пост)
библиотека - последняя. остальное симлинки.

А что такое симлинки?

http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%...%BB%D0%BA%D0%B0

выполни команду которую тебе выше написали, а еше попробуй вот так

Код

 typedef bool (*MyPrototype)();
 MyPrototype myFunction =    (MyPrototype) QLibrary::resolve("libSt001ng", "is_exists");
 if (myFunction) qDebug()<<"Ey";



--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
dix75
Дата 3.2.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



andrew_121, 
Я так понял все таки в библиотеке функция есть.
Только непонятно почему 2

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  snap.png 13,58 Kb


--------------------
save your mind
PM MAIL   Вверх
dix75
Дата 3.2.2010, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



Цитата(ecspertiza @  3.2.2010,  09:06 Найти цитируемый пост)
 typedef bool (*MyPrototype)(); MyPrototype myFunction =    (MyPrototype) QLibrary::resolve("libSt001ng", "is_exists"); if (myFunction) qDebug()<<"Ey";

так я пробовал 

Это сообщение отредактировал(а) dix75 - 3.2.2010, 09:43


--------------------
save your mind
PM MAIL   Вверх
maxxant
Дата 3.2.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 8.9.2009

Репутация: 1
Всего: 1



Цитата(dix75 @  3.2.2010,  01:19 Найти цитируемый пост)
Почему-то я не могу подключить эту библиотеку.


Проблема как-то размыта.  Попробуй её локализовать. Непонятно, то ли библиотека не видиться, то ли символ в либе не может найти, поскольку здесь сразу два действия происходят. Попробуй сначала просто:
Код

bool QLibrary::isLibrary ( const QString & fileName )   [static]

если уже здесь либу не видит попробуй полный путь в имени файла, н.р.:
Код

QString name = QCoreApplication::applicationDirPath () + "/mylibs/libSt001ng";
if( QLibrary::isLibrary(name) )
{
   ...

если ок, тогда:
создай объект и попробуй загрузить:
Код

QLibrary myLib(name);
bool QLibrary::load ()

если ок, пробуй дальше и напиши.

PM MAIL   Вверх
ecspertiza
Дата 3.2.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Еше у QLibrary есть errorString() , посмотри что возврощает errorString() тогда уж точно будет понятно.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
dix75
Дата 3.2.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



maxxant, 

Проблема оказалась в путях
Код

QString name = QCoreApplication::applicationDirPath () + "/libSt001ng";



--------------------
save your mind
PM MAIL   Вверх
dix75
Дата 3.2.2010, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



Ситуация в следующем
проблема в путях
ислледуя пути
Код

qDebug()<<app.libraryPaths();

я получал, что в путях сидит каталог приложения
и логичное предположение , что библиотеку там приложение найдет, оказывается нет.
Хуже того добавляя в пути 
Код

так        app.addLibraryPath(QCoreApplication::applicationDirPath () );
и так    app.addLibraryPath(QCoreApplication::applicationDirPath () +'/');
и так    app.addLibraryPath(QCoreApplication::applicationDirPath () +"//");

приложение всё равно требует полный путь
Код

QCoreApplication::applicationDirPath () + "/St001ng";


Что за ерунда, может кто-нить объяснить.
Может ключи какие нибудь надо добавить к приложению при компиляции?

Это сообщение отредактировал(а) dix75 - 3.2.2010, 11:21


--------------------
save your mind
PM MAIL   Вверх
bsa
Дата 3.2.2010, 15:08 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



dix75, это не ерунда. Это стандартное поведение в *nix системах. Библиотеки ищутся только в определенных местах (/lib, /usr/lib, /usr/local/lib...). Если тебе нужно в каком-то другом месте, то нужно указывать путь полностью. Можно перед запуском проги присвоить переменной среды LD_LIBRARY_PATH путь к твоей библиотеке. Или прописать его в /etc/ld.so.conf... Только это неправильно.
PM   Вверх
andrew_121
Дата 3.2.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(dix75 @  3.2.2010,  09:42 Найти цитируемый пост)
Только непонятно почему 2 

1. нужно увидеть как ты экспортируешь функцию.
2. адрес у обеих один - значит гуд.



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
dix75
Дата 3.2.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



bsa, 
спасибо незнал
Троли могли бы и написать.
Выходит интерфейс работы с библиотеками отличается у Никсов и Винды

Добавлено через 6 минут и 14 секунд
Цитата(andrew_121 @  3.2.2010,  15:54 Найти цитируемый пост)
1. нужно увидеть как ты экспортируешь функцию.

Я все библиотечные функции внедрил в шаблоны  и не трогую их.
работаю так.
Код

vDLL<bool, vdll::Message > (const_lib_path_ +"St001ng",    "is_exists")(false);

теперь интерфейс работы нужно будет изменить 
const_lib_path_  путь для Никсов 
и пустой для Винды



--------------------
save your mind
PM MAIL   Вверх
andrew_121
Дата 3.2.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 11
Всего: 33



Цитата(dix75 @  3.2.2010,  16:00 Найти цитируемый пост)
Я все библиотечные функции внедрил в шаблоны  и не трогую их.
работаю так.

очень информативно smile 


Цитата(dix75 @  3.2.2010,  16:00 Найти цитируемый пост)
Выходит интерфейс работы с библиотеками отличается у Никсов и Винды

нет. интерфейс тот же. просто дин-либы должны лежать в определенном месте.


Цитата(dix75 @  3.2.2010,  16:00 Найти цитируемый пост)
const_lib_path_  путь для Никсов 

так а что, либа будет валятся в каталоге с твоей прогой?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
dix75
Дата 3.2.2010, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 462
Регистрация: 17.7.2007

Репутация: 1
Всего: 1



Цитата(andrew_121 @  3.2.2010,  17:07 Найти цитируемый пост)
так а что, либа будет валятся в каталоге с твоей прогой?

а почему бы и нет.
Может потом  а папки каие нить засуну


--------------------
save your mind
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.