Forums » Разработка версии 3.х »
Компиляция Cyberplat 3.0 под linux
Added by Микаэль Месюк 123 days ago
Доброго времени суток.
Решил разбираться поступательно с modules, конвертировал решение Modules.sln из студии (VS2010) с помощью qt-vs-addin-1.1.10 , он автоматом для каждого проекта создает .pro файлы соответственно в Modules.pro прописывает их , возникает проблема лишь с Log , дело в том что путь до него содержит пробел SUBDIRS += Common/Log/QFile based/msvc/Log.pro заменил на QFile_based , соответственно переименовал папку.
По пути Cyberplat/3.0/src/includes в некоторых файлах, которые служат как я понимаю вспомогательно,указан путь типа : #include "../../Modules/UpdateEngine/src/Updater.h" компилятор не находит Modules , приходится в каждом файле исправлять на modules
Вот список на что ругался компилятор и что удалось исправить , подскажите если что не так :
при компиляции DeviceManager :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/includes/SDK/Plugins/IPlugin.h:1: ошибка: в программе обнаружен некорректный символ «\377»
Подобного очень много в этом файле, в основном это ругань на коментарии
открыл gedit'ом и пересохранил
дальше :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/includes/SDK/Plugins/IPlugin.h:44: ошибка: спецификатор pure в определении функции
на гуглил вот это :
gcc не позволяет совмещать pure-спецификатор и тело функции,
изменил на virtual ~IPlugin() = 0 ; и вынес реализацию за скобки класса
Plugin::~IPlugin(){}
дальше :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/includes/SDK/Plugins/PluginParameters.h:88: ошибка: специализация «template<class T> struct QMetaTypeId» в другой namespace-области [-fpermissive]
переместил Q_DECLARE_METATYPE(SPluginParameter) и Q_DECLARE_METATYPE(TParameterList) за скобки SDK исправив на
Q_DECLARE_METATYPE(SDK::Plugin::SPluginParameter)
Q_DECLARE_METATYPE(SDK::Plugin::TParameterList)
при компиляции NetworkTaskManager :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/modules/NetworkTaskManager/msvc/../src/NetworkTask.h:68: ошибка: «NetworkTaskManager» не является именем типадобавил #include "NetworkTaskManager.h"
при компиляции ScenarioEngine
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/modules/ScenarioEngine/msvc/../src/ScenarioEngine.cpp:153: ошибка: «prevScenario» не является именем типаругается на auto , в ScenarioEngine.pro добавил QMAKE_CXXFLAGS = -std=c+0x
А вот эти ошибки связанны с windows , что с этим можно сделать ?
Для экономии места показываю только самые первые ошибки.
при компиляции AxFlashPlayer :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/modules/AxFlashPlayer/msvc/../src/AxFlashPlayer.h:17: фатальная ошибка: ActiveQt/QAxObject: Нет такого файла или каталога Не уверен что это вообще можно пользовать в linux
при компиляции Connection :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/modules/Connection/Win32/src/RasWrapper.h:12: фатальная ошибка: windows.h: Нет такого файла или каталога
при компиляции DatabaseProxy :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/modules/DatabaseProxy/msvc/../src/NamedMutexWin.cpp:10: ошибка: «HANDLE» не является именем типа
при компиляции DebugUtils :
/home/mika/MyProjects/Qt/Cyberplat/3.0/src/includes/DebugUtils/DebugUtils.h:13: ошибка: #error The type TExceptionHandler is not defined for the current platform.
при компиляции SysUtils
тоже пишет про windows.h
Благодраю
Replies
RE: Компиляция Cyberplat 3.0 под linux - Added by Алексей Катроевский 122 days ago
Возможно некоторые файлы сохранены в utf-8, только поэтому компилятор может ругаться на первый символ файла (UTF BOM маркер). Если есть, добавьте опцию компилятору, чтобы понимал исходники в utf-8.
AxFlashPlayer - это обёртка над activex, в линуксе вещь бесполезная, но она пока и не используется и никуда не линкуется. Можете её просто не собирать.
Connection:
- DialupConnection нужно реализовать под линукс. Мы хотели использовать NetworkManager через DBus.
- LocalConnection должен собираться, это просто затычка для соединения, управляемого другой программой (правильней назвать UnmanagedConnection).
В принципе оба класса могут быть пустыми (возвращать true, где это ожидается), но тогда ПО не сможет управлять соединением.
В DatabaseProxy файл NamedMutexWin.cpp не используется, его можно не компилировать.
SysUtils нужен для перезагрузки компьютера. Нужно реализовать под линукс, если хотите, чтобы ПО могло перезагрузить систему (актуально с windows при наличии вирусов).
По DebugUtils ответим позже. То, что можно поправить в коде (макросы Qt, тела чистых виртуальных методов) - поправим. Синхронизация дерева исходников разработчиков с публичным деревом происходит ежедневно (ночью), поэтому обновляйте своё рабочее дерево регулярно.
RE: Компиляция Cyberplat 3.0 под linux - Added by Микаэль Месюк 122 days ago
Спасибо.
тогда ПО не сможет управлять соединением.
как то я не много запутался )
Не могли вы не много по подробнее , не могу понять его роль в масштабе всего приложения.
RE: Компиляция Cyberplat 3.0 под linux - Added by Алексей Катроевский 122 days ago
В ПО реализована дозванивалка. Устанавливает и поддерживает соединение заданного типа. Классы Dialup/LocalConnection реализуют API соединения и разрыва связи. NetworkService после инициализации устанавливает соединение и поддерживает его (пингует сервер, переустанавливает соединение, сбрасывает модем по питанию).
Если соединение управляется внешней дозванивалкой (или NetworkManager в линуксе), то используется LocalConnection (просто возвращает true на все вызовы).