Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Object Pascal: кроссплатформенные технологии > Программа на Kylix не запускается без IDE |
Автор: Vit 21.5.2004, 15:40 |
Обычно при запуске приложения на Kylix без самого Kylix выскакивают различные трудно понятные ошибки. Они связаны с тем что приложение не может найти нужные ему библиотеки. В простейшем случае достаточно предпринять следующие шаги: 1) создать папку /usr/lib/borland 2) В эту папку скопировать файл libborqt-6.9.0-qt2.3.so с машины где установлен Kylix 3) Создать символьный линк libborqt-6.9-qt2.3.so на этот файл (команда linux ln -s ) 4) Отредактирвоать файл в папке /home/[ваш логин] по имени .bash_profile (внимение файл скрытый!) PATH=$PATH:$HOME/bin:. export LD_LIBRARY_PATH=/usr/lib/borland export PATH 5) Убедиться что у пользователя под которым вы собираетесь работать есть права на чтение и запуск libborqt-6.9.0-qt2.3.so и libborqt-6.9-qt2.3.so 5) Перезагрузить компьютер (не под root!) |
Автор: Гость_aleko_s 19.11.2004, 08:36 |
А то делать в случае с консольным приложением. Зачем консольнуму приложению библиотека QT? У меня консольное приложение с DataModule с доступом к MySQL. В файле программы штук 20 ссылок на .so-файлы, из которых штук 7 лежат в директориях Kylix (в т.ч. libborqt*). Неужели все эти so нужны консольнуму приложению? |
Автор: Vit 19.11.2004, 14:56 |
DataModule - это часть CLX и скорее всего повязана на QT, хотя я могу ошибаться... Чистое консольное приложение у меня работает без QT... Посмотрите что у Вас в Uses стоит - может затесалось чего не нужное |
Автор: Гость_aleko_s 20.11.2004, 00:47 |
Спасибо. Обязательно посмотрю. Программка, если она запущена из под консоли, ругается на InitPAnsiString, по-моему. Год назад под вторым киликсом консольное приложение с DataModule'м тоже не хотело работать. Там всё вылечилось в 2 приёма: 1) Замена dm:=Tdm.Create(Application) на dm:=Tdm.Create(nil) (если я писал Application, то компиллер, естественно, требовал включить в uses, тот модуль, где этот класc определён, где и вылезал на свет Божий QT) 2) копированием библиотек для MySQL в каталог с программой(если я чегой-то не забыл). Или я наврал всё... Не помню... Может я делал в рантайме что-то, типа SQLConnection := TSQLConnection.Create и обошёлся без DataModule Ну не нужны же все эти КьюТи консольному приложению !!! В любом случае, хотелось бы определиться с вопросом запуска приложений, написанных на Kylix, без самого Kylix и с МИНИМАЛЬНЫМ набором библиотек. С целью избежать сюрпризов в дальнейшем. |
Автор: Vit 20.11.2004, 02:20 | ||
Может быть эффект, того что где то есть чего-нибудь очень обычное, типа: Showmessage() Application.Processmessages; и т.п. |
Автор: aleko_s 20.11.2004, 20:04 |
Объект Application вообще не использую в программе (иначе бы пришлось в uses указать модуль, где он описан :-) ) Функции, типа ShowMessage - тоже. Используется writeln(qryTraLaLaF_FIELD.AsString). Сама writeln не виновата. Когда пишу простенькое Hello,world - консольное приложение, никакие КьюТи и ЛибСиКуЭлМай - не нужны.... Попробую еще обойтись без модуля данных... А моему приложению оказались нужны библиотеи libborqt..... и libsqlmy.so... и достаточно было, чтобы LD_LIBRARY_PATH указывал туда, где они лежат.... Всё равно не верю, что так и должно быть с КьюТи (как Константин Сергеич, прям) |
Автор: Akella 27.10.2005, 12:58 | ||
А если писать CLX на Delphi7, обязательно ли выполнять это
|
Автор: Vit 28.10.2005, 04:16 |
тогда обязательно присутствие dll: borqt.dll или как-то там похоже... |
Автор: Mu57Di3 21.2.2006, 12:47 |
Нужна qtintf70.dll в папку с прогой достаточно кинуть. Это как я понял Борландовская реализация qt под винду. Или интерфейс трансляции QT API в WinAPI/ |
Автор: Darkmaster 13.7.2006, 13:44 | ||
Вопрос: а если собираетесь распространять по написанное на kylix. как сделать чтобы оно работало без этих манипуляций? |
Автор: w2w 11.9.2008, 11:21 |
Это известная ошибка, которая появилась в Kylix3. До этого выдавалось более осмысленное сообщение. Смысл в следующем. Предпринимается попытка вызвать Qt-шный метод (уже при инициализации программы). Производится поиск библиотеки, сначала ищется новая версия, это libborqt* если эта библиотека не лежит в путях для поиска, то предприниматеся попытка найти старую версию библиотеки (поставлялась с Кулих1 и 2 версий) libqt*. Тут, понятное дело. Что-то находится ![]() Приведенные способы лечения помогут. Но я поступаю проще. Копирую либу libborqt-6.9.0-qt2.3.so в каталог /usr/lib и делаю на нее симлинк ln -s libborqt-6.9-qt2.3.so и все после этого начинает работать. Причем, нет нужды запускать файлы через скрипт с изменением путей поиска либов. Идем дальше. Естественно, для демона или неоконной программы, которые в Кулих писать можно без проблем, не нужна библиотека libborqt*. Но ДатаМодуль по умолчанию включает в заголовок файла модуль QTypes. Его нужно просто удалить из Uses. Он не нужен там совсем. Кстати, любые модули начинающиеся с Q это файлы, которые приведут к вызову этой злополучной ![]() Кроме того, хочется обратить внимание на слеующее - для написания и успешного запуска проектов, которые используют "продвинутые" технологии потребуются дополнительные библиотеки. Если при запуске из консоли программы идут ошибки, а при работе в среде разработки все ОК - это верный признак отсутствия либы. Пример - TXmlDocument - по умолчанию использует Xerses парсер - требуются дополнительные библиотеки. Без либов юзается OpenDOM. Компоненты Corba и Midas требуют дополнительных либов ну и т.д. Удачи ![]() |
Автор: w2w 11.9.2008, 11:39 | ||
Без этих манипуляций оно не работает ![]() Для того, чтобы распространять, нужно создать установочные файлы (для примера, rpm) и в его состав включить все, что необходимо для работы. А то, что нужно делать руками описать в файле INSTALL или написать preinstall и/или postinstall скрипты для rpm для автоматического выполнения. Часто можно увидеть отдельную поставку - программа и либы. Библиотеки нужно устанавливать один раз. Все программы юзают их сообща. В этом, кстати, преимущество размещения либов в стандартных путях, чтобы не запутаться в конфигах или стартовых скриптах. |