Как установить значок на рабочем столе моего приложения для Linux: KDE, Gnome и т.д.?

Размер структуры больше, чем сумма ее частей из-за того, что называется упаковкой. У конкретного процессора есть предпочтительный размер данных, с которым он работает. Большинство современных процессоров предпочитают размер, если 32 бит (4 байта). Доступ к памяти, когда данные находятся на этом типе границы, более эффективен, чем те, которые охватывают эту границу размера.

Например. Рассмотрим простую структуру:

struct myStruct
{
   int a;
   char b;
   int c;
} data;

Если машина является 32-разрядной машиной, а данные выровнены по 32-битной границе, мы видим немедленную проблему (при отсутствии выравнивания структуры). В этом примере предположим, что данные структуры начинаются с адреса 1024 (0x400 - обратите внимание, что младшие 2 бита равны нулю, поэтому данные выравниваются с 32-разрядной границей). Доступ к data.a будет работать нормально, потому что он начинается на границе - 0x400. Доступ к data.b также будет работать нормально, поскольку он находится по адресу 0x404 - еще одна 32-разрядная граница. Но неуравновешенная структура поставит data.c по адресу 0x405. 4 байта данных.c находятся в 0x405, 0x406, 0x407, 0x408. На 32-битной машине система считывала data.c в течение одного цикла памяти, но получала бы только 3 из 4 байтов (четвертый байт находится на следующей границе). Таким образом, системе потребуется второй доступ к памяти для получения 4-го байта,

Теперь, если вместо того, чтобы поместить data.c по адресу 0x405, компилятор заполнил структуру на 3 байта и поместил данные. c по адресу 0x408, тогда системе потребуется всего 1 цикл, чтобы прочитать данные, сократив время доступа к этому элементу данных на 50%. Заполняет эффективность памяти для эффективности обработки. Учитывая, что компьютеры могут иметь огромные объемы памяти (много гигабайт), компиляторы считают, что своп (скорость над размером) является разумным.

К сожалению, эта проблема становится убийцей при попытке отправить структуры по сети или даже записать двоичные данные в двоичный файл. Прокладка, вставленная между элементами структуры или класса, может нарушить данные, отправленные в файл или сеть. Чтобы написать переносимый код (тот, который будет использоваться для нескольких разных компиляторов), вам, вероятно, придется обращаться к каждому элементу структуры отдельно, чтобы обеспечить надлежащую «упаковку».

С другой стороны, разные компиляторы имеют разные возможности для управления упаковкой структуры данных. Например, в Visual C / C ++ компилятор поддерживает команду #pragma pack. Это позволит вам настроить упаковку и выравнивание данных.

Например:

#pragma pack 1
struct MyStruct
{
    int a;
    char b;
    int c;
    short d;
} myData;

I = sizeof(myData);

Теперь я должен иметь длину 11. Без прагмы я мог бы быть чем угодно из 11 до 14 (а для некоторых систем - до 32), в зависимости от стандартной упаковки компилятора.

12
задан KPexEA 23 September 2008 в 03:58
поделиться

3 ответа

Для Gnome и Kde, Вы, вероятно, хотели бы включать файл на рабочем столе со своим приложением, которое определяет, как это будет запущено. Спецификация может быть найдена здесь. Если бы Вам включали установщик с Вашим приложением, Вы, вероятно, хотели бы иметь его, генерируют этот файл на рабочем столе и помещают его в правильные места для создания записей меню и этажерки

10
ответ дан 2 December 2019 в 21:04
поделиться

При использовании одной из подвергнутых термообработке систем сборки F/OSS, таких как поддержка CMake KDE, это действительно довольно легко, после того как у Вас есть .desktop файл:

установка (ФАЙЛЫ myapp.desktop ЦЕЛЕВОЙ $ {XDG_APPS_INSTALL_DIR}) kde4_add_app_icon (myapp_SRCS "$ {CMAKE_CURRENT_SOURCE_DIR}/hi*-app-myappname.png")

Если Вы прокручиваете свое собственное, рассматриваете использование xdg-utils, который включает удобные небольшие сценарии как xdg-desktop-menu (устанавливает настольные пункты меню), и xdg-значок-на-рабочем-столе (устанавливает значки на рабочем столе) для таких вещей.

На .desktop стандарт уже указали в первом комментарии, хотя можно также просто захватить тот, который уже установлен в системе, и измените его оттуда. Что касается значков, geerally поддерживаются PNGs и SVGs, хотя PNGs имеют тенденцию давать лучшие результаты все еще.

3
ответ дан 2 December 2019 в 21:04
поделиться

Сообщество KDE с он - ряд KDE 4, запущенный для использования CMake в качестве системы сборки. Они разработали макрос CMake, который знает, как установить значок для Вашего приложения независимо платформы (окна (встроенный в exe), Mac (.app пакеты), Linux (.desktop файлы) и т.д.)

Возможно, можно использовать его.

1
ответ дан 2 December 2019 в 21:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: