Название: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 17:22 проект, созданный и отлаженный в винде с помощью QtCreator/MinGW, переносится в Linux, все происходит предсказуемо и работает, кроме одного момента (в MinGW проблемы нет, все работает):
приложение расширяется с помощью динамических библиотек, но не стандартных Qt-плагинов, а загрузкой библиотек, создаваемых специальным образом - так получилось исторически, поскольку библиотеки пишутся на С, а не С++, и Qt они не используют, это оптимизированные вычислительные модули код загрузки библиотеки весь не нужно приводить, только кусок, который собственно загружает и проверяет: Код: QLibrary lib( libFileName() ); // при этом вызове libFileName() возвращает в Linux имя файла в виде: "./libsomename.so", в WinGW просто "somename.dll" библиотека собирается сразу перед сборкой основного приложения, в смежном проекте, теми же средствами, начало ее .pro выглядит так: QT -= core TARGET = somename CONFIG += shared TEMPLATE = lib что не так? почему не грузится библиотека в Linux? Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 17:35 Добавь после load:
Код
и покажи что она выводит. Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 17:41 "Unknown error"
обалдеть как информативно... :( Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 17:47 а, не, это было после конструктора, после load вот это:
Цитировать Cannot load library libsomename.so: (libsomename.so: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога) хотя такой файл находится именно в текущем каталоге, поскольку его имя получено из списка текущего каталога там, на самом деле, вот так: Код: QDir dir( "", "", QDir::Name ); то есть, файл заведомо существует и виден в dirList в отладчике, правда как "./libsomename.so", что по идее не принципиально Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 18:22 а, не, это было после конструктора, после load вот это: А какой каталог является рабочим?Цитировать Cannot load library libsomename.so: (libsomename.so: невозможно открыть разделяемый объектный файл: Нет такого файла или каталога) хотя такой файл находится именно в текущем каталоге, поскольку его имя получено из списка текущего каталога Ты исполняемый файл сам в терминале запускаешь или из среды его стартуешь? Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 18:29 я же код написал - открывается именно рабочий каталог, считывается его содержимое, ищутся в нем файлы с именами библиотек, и загружаются
как ни запускай - что из отладчика, что само приложение из терминала - все одинаково тем более, в имени файла содержится ./ то есть, он должен именно из рабочего каталога браться да и в настройке проекта QtCreator рабочий каталог для отладочного запуска именно тот, который нужен, в нем лежит библиотека ощущение такое, что надо писать bug report... Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 18:39 QString QFileInfo::absoluteFilePath () const
Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 18:52 Код: if( ! lib.load() ) fi == "libsomename.co" eee == "/home/Documents/APP-build-desktop/libsomename.so" и приложение, и библиотека находятся в /home/Documents/APP-build-desktop это и раньше было видно, что с каталогом проблемы нет, поскольку быть не может, если библиотека заведомо открывается именно в том каталоге, где она находится попробую открыть по абсолютному маршруту, но это не есть кошерно Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 18:56 по абсолютному маршруту заработало
ИМХО - баг имеет место быть, файл .so не открывается в текущем каталоге в Linux-версии, в Windows-версии все работает Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 19:14 ИМХО - баг имеет место быть, файл .so не открывается в текущем каталоге в Linux-версии, в Windows-версии все работает Нет никакого бага.Почитай, что возвращает QString QFileInfo::fileName () const, там даже пример есть. Никакого ./ перед файлом этот метод не возвращает, поэтому загрузчик ищет эти библиотеки по стандартным путям (в linux текущий каталог в эти пути не входит, в отличие от венды). Что написал, то и получил. ;) Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 19:26 как это ./ нет перед именем, если я его в отладчике вижу??
в отладчике четко видно, что dirList[ i ].fileName() == "./libsomename.so" Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 19:32 как это ./ нет перед именем, если я его в отладчике вижу?? А если через qDebug вывести?в отладчике четко видно, что dirList[ i ].fileName() == "./libsomename.so" Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 19:35 да просто если строке присвоить - в ней уже нет ./ :-\
то есть, баг таки есть, но в другом месте Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 19:41 да просто если строке присвоить - в ней уже нет ./ :-\ Если все работает согласно документации, то в чем баг. :)то есть, баг таки есть, но в другом месте, причем не факт, что в отладчике, похоже в классе QFileInfoList Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: Гурман от Ноябрь 23, 2010, 19:43 в отладчике я вижу не то имя файла, которое получаю при присвоении из класса QFileInfoList - при каких-нибудь операциях с этим классом это может вылезти, мало ли... внутри класса файлы из текущего каталога, а вне класса уже без префикса ./
да и вообще это сбивает с толку Название: Re: не грузится библиотека в Linux (MinGW работает) Отправлено: BRE от Ноябрь 23, 2010, 19:48 в отладчике я вижу не то имя файла, которое получаю при присвоении из класса QFileInfoList - при каких-нибудь операциях с этим классом это может вылезти, мало ли... внутри класса файлы из текущего каталога, а вне класса уже без префикса ./ Программировать нужно по документации, а не по отладчику.да и вообще это сбивает с толку Скорее всего это debug-assistant так разворачивает имена для QFileInfoList, а в документации явно написано как будет на самом деле. :) |