Компиляция 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)

далее подобные ошибки , исправив их, модуль DeviceManager собрался .

при компиляции 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 на все вызовы).