2013-12-03 3 views
0

Я немного застрял в попытке передать мой код из Windows в Linux. Я создал программу на базе Bluetooth, которая, похоже, хорошо работает в Windows, мне нужно работать в Ubuntu.C++ Windows to Linux - что мне нужно знать?

К сожалению, компьютер с Linux не является моим, поэтому я не могу иметь никаких простых хаков, используя Wine или другие массовые методы изменения компилятора, мне действительно нужны рекомендации по переносу моего кода, чтобы он был распознан и работать в разных ОС.

У компьютера действительно установлен код :: блоки, что из того, что я понимаю, довольно полезно при конвертировании некоторых вещей для компиляции кросс-OS, но я не слишком далеко.

Оригинальный код был написан на Visual Studio 2013 и, по понятным причинам, он не играет красиво в коде :: blocks. Я получаю много ошибок «не могу найти заголовок», но я не думаю, что просто найти все недостающие заголовки и скопировать их через будет работать (не так ли?).

Мне нужны некоторые предложения по самому простому, автономному решению для моей ситуации. По автономному я имею в виду, что я хочу получить столько необходимых изменений и библиотек в моем проекте, а не изменять/устанавливать множество вещей на машине Linux.

Я действительно не знаю, с чего начать и искать в Интернете, похоже, не слишком полезно.

Спасибо!

+4

Вы не можете просто пощекотать переводчика и перекомпилировать. стек BT для Linux будет совершенно другим зверем, чем стек Windows. –

+3

Начните с поиска [здесь] (http://www.bluez.org/). API-интерфейс BlueZ daemon использует DBus, поэтому вам придется использовать некоторые библиотеки C++ DBus (Qt хорошо работает в Linux). – Nazar554

+0

@ Nazar554, спасибо за ваш ответ, я начал смотреть на BLueZ, и это похоже на то, что я хочу. Я нашел эту страницу, дающую несколько хороших примеров http://people.csail.mit.edu/albert/bluez-intro/x502.html. Мне удалось подключиться к моему устройству и теперь читать его. Довольно много сделано! Спасибо за хорошее предложение. – ritchie888

ответ

1

Прежде всего, я предлагаю вам изучить код для Windows, и использовать PIMPL idiom (также here, here ...) в классах, чтобы изолировать все зависимый от платформы код для разделения окна и реализации класса Linux. Затем ваш основной независимый от платформы класс будет просто делегировать каждую реализацию во время компиляции с использованием макросов препроцессора, чтобы включить соответствующий заголовок реализации платформы и файлы cpp. Помимо этого, многие функции времени исполнения, реализованные в Visual Studio, либо как Microsoft, либо были «изменены», но уже не совместимы или даже имеют те же имена, что и стандартные, которые вы найдете в Linux. Для этого вам нужно будет использовать файл platform.h и platform.cpp с отдельными разделами для двух операционных систем, содержащий недостающие функции в макроопределенной форме (например, windows: strnicmp(), linux: strncasecomp ()), или напишите недостающие самостоятельно. Пример:

// Linux section ... 
#ifdef LINUX 
#define strnicmp strncasecmp 
#endif 

Заключительная работа зависит от количества вызовов, связанных с конкретным окном, в вашем коде.

+2

Благодарим за отзыв, но я думаю, что будет намного проще понять Linux-пакет Bluetooth и перейти оттуда. Я начал с Bluez и могу подключиться к своему устройству, просто нужно разобраться, как читать с него, и я в значительной степени сделал это. – ritchie888

Смежные вопросы