LINUX.ORG.RU

Сообщения Odin_KG

 

Можно ли использовать wxWidgets без установки? (т.е. просто положить so в папку с программой)

Здравствуйте,

Не могу понять, как подключить wxWidgets без его установки в систему. На сайте авторов нашел только пример с подключением либо через CMake строками типа:

find_package(wxWidgets REQUIRED COMPONENTS gl core base)
if(wxWidgets_USE_FILE) # not defined in CONFIG mode
	include(${wxWidgets_USE_FILE})

либо в Code::Blocks-е я пишу особые флаги для сборки. Для линковщика:

`wx-config --libs std,gl`

а для компилятора:

`wx-config --cflags`

Да, это всё отлично работает, но мне бы сильно упростило жизнь ситуация, когда можно просто таскать этот wxWidgets с собой.

Если я собираю динамические библиотеки и пытаюсь их подключить, то проблема возникает уже на этапе подключения заголовков, потому что требуемый файл setup.h вообще отсутствует в папке include. Да, там по разным папкам раскидано несколько setup.h, но непонятно какой брать и можно ли так вообще делать. Я с одним попробовал, но опять вылезла ошибка причем компилятор упёрся в текст:

#error "No Target! You should use wx-config program for compilation flags!"

Я понимаю, что там есть некая программа wx-config, но я не понимаю, как её применить для моего случая.

Вопрос касается как Unix-ов, так и MAC-а (проблема абсолютно одинаковая). С Windows-ом всё заработало, а здесь…

Проверял на Debian-64, до этого пытался на Fedora-64.

 , , ,

Odin_KG
()

Как правильно создать пакет для установки своей программы?

Здравствуйте,

Имеется программа, которая вполне уже работает. Разработка делалась на Windows, но хотелось бы всё это запустить и на Linux-ах с Mac-ом. Пришлось озаботиться созданием пакетов на Linux-е.

Сейчас использую Fedora-64 на вируталке. Нашел инструкцию по созданию deb-пакетов. Пакет вроде как создался, но при попытке его установить через sudo dpkg -i mdev_0.1_amd64.deb получаю сообщения, что нужные пакеты freetype и wxwidgets отсутствуют.

dpkg: dependency problems prevent configuration of mdev:
 mdev depends on freetype; however:
  Package freetype is not installed.
 mdev depends on wxwidgets; however:
  Package wxwidgets is not installed.

Однако команда rpm -qa показывает, что пакет freetype уж точно установлен:

freetype-2.6.5-9.fc25.i686

Да и wxWidgets тоже есть, иначе бы программа не запускалась.

В файле control пакета я, действительно, вписал строчку:

Depends: freetype, wxWidgets

Но как бы они же установлены.

Ну или есть у меня версия, что эти требуемые пакеты должны быть установлены в том же самом пакетном менеджере, а иначе их просто не видно при распаковке пакета. Но эта идея пока мне представляется очень и очень нехорошей, потому что в этом случае я вообще не понимаю, как эти пакеты делают, ведь этих пакетных менеджеров на свете не так уж и мало.

Короче, я не понимаю принцип, как это надо делать правильно. Или надо делать под каждый пакетный менеджер отдельно ? В общем хотелось бы получить хоть какое-то универсальное решение.

 , , ,

Odin_KG
()

CMake не собирает проект из автозапуска (crontab), но собирает при ручном запуске

Здравствуйте,

Имеется скрипт sh, который сначала запускает CMake, а потом make, собирая таким образом пусковой файл проекта. Всё это вполне хорошо работало ровно до того момента, пока я не поместил этот скрипт в автозапуск через crontab. В результате таким способом проект не собирается, так как CMake выдает ошибку в стиле «некорректная конфигурация». Непонятно, каким образом рабочая конфигурация при автозапуске становится некорректной. Везде стоят абсолютные пути, пауза на запуск скрипта в 30 секунд имеется, дабы OS успела стартануть (пробовал ставить паузу полторы минуты, но толку нет).

CMake версии 3.30.3. В качестве OS используется Fedora на виртуалке. Результат в виде лога с ошибкой, который выдает CMake, можно увидеть здесь: https://www.astralax.com/temp/CMakeOutput.log

Сам CMakeLists.txt выглядит так:

cmake_minimum_required(VERSION 3.8)

set(CMAKE_C_FLAGS "-m64")
set(CMAKE_CXX_FLAGS "-m64")

project("mgcore")


SET(SOURCE "Backup.cpp" "Component.cpp" "Core.cpp" "Editor.cpp" "Graphics.cpp" "Magl.cpp" "Root.cpp" "stdafx.cpp" "Surface16.cpp" "Surface32.cpp" "Theme.cpp" "ThemeWindows.cpp" "utils.cpp" "VirtualDrive.cpp" "font/Font.cpp")

SET(HEADER "Backup.h" "Component.h" "Core.h" "dcrt.h" "Graphics.h" "Magl.h" "mgdv.h" "Root.h" "stb_image.h" "stb_image_write.h" "stdafx.h" "Surface16.h" "Surface32.h" "targetver.h" "Theme.h" "ThemeWindows.h" "utils.h" "VirtualDrive.h" "font/Font.h" "font/ft2build.h")

add_library(${PROJECT_NAME} ${SOURCE} ${HEADER})

include_directories(include)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED on)
add_definitions(-D_LIB -D_UTF8_ -DFREETYPE -DMD_APPLICATION -DMD_UNIX -DMD_CMAKE -DMD_X64)

target_compile_definitions(${PROJECT_NAME} PRIVATE
PUBLIC
$<$<CONFIG:Debug>:MD_DEBUG _DEBUG>
$<$<CONFIG:Release>:MD_RELEASE>
$<$<CONFIG:RelWithDebInfo>:MD_DEBUG _DEBUG>
$<$<CONFIG:MinSizeRel>:MD_RELEASE>
)
target_include_directories(${PROJECT_NAME} PRIVATE ./ font)

target_link_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR})

 ,

Odin_KG
()

Как открыть папку в проводнике и желательно ещё выделить нужный файл?

Здравствуйте,

Пытаюсь открыть папку командой: execlp(«xdg-open», «xdg-open», «/root/Desktop/mtest/Project/DATA», NULL); Но почему-то вылезает MessageBox с сообщением «Malformed url» При этом если напечатать в Терминале: xdg-open /root/Desktop/mtest/Project/DATA , то папка отлично открывается.

В идеале нужно ещё не просто папку открывать, а выделить в ней нужный файл, но это уже вторая задача.

Пробую на Fedora-64, но нужно, чтобы везде работало, ну или почти везде.

 , ,

Odin_KG
()

Как собирать на Fedora-64 32-битные приложения (CMake)

Добрый день

Пытаюсь добиться сборки 32-битного варианта приложения (64 бита собирается без проблем). Использую CMake, который генерирует проект для GCC.

В файл CMake-а добавляю строку: set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS «-m32» LINK_FLAGS «-m32») На это CMake выдает ошибку: CMake Error at CMakeLists.txt:8 (set_target_properties): set_target_properties Can not find target to add properties to: mgcore

Как я понимаю, нет пакета для сборки в 32-битном режиме. Нахожу совет за 2023 год конкретно для Fedora, т.е. недавний: sudo dnf install gcc-multilib На это получаю сообщение об отсутствии такого пакета.

Разные вариации вариантов типа: sudo apt install gcc-multilib или sudo apt install g++-multilib тоже не работают, потому что apt на Fedore не хочет работать в принципе, а попытка подсунуть вместо него yum или apt-get также ведут к ошибке типа «такого пакета нет».

 , ,

Odin_KG
()

Возможно ли как-то подсунуть иконку пусковому файлу без установки?

В Windows назначить иконку exe-шнику не вызывает вопросов, так как картинки можно поместить внутрь файла. В Unix-е же я вижу, что нужно использовать некий файл .desktop, который надо поместить в определенное место, потом внутри прописать путь к файлу иконок (не понимаю, почему путь только один, ведь иконок может быть много для разных размеров). И как бы очевидно, что для всего этого нужна установка программы. Кроме того, как я понимаю, всё это опять же привязывается к конкретному пути, по которому находится программа и если папку переместить, то опять всё перестанет работать. Видимо ответ на мой вопрос «нет», но на всякий случай решил уточнить.

 ,

Odin_KG
()

Странное поведение so (она же dll) на linux-е

Есть OS Fedora на виртуалке. Собираю свой проект, который использует библиотеку freetype. Сам freetype установлен, но мне надо, чтобы использовалась именно libfreetype.so, которая помещена мною в каталог проекта. Проблема в том, что когда проект собирается, то линковщик действительно ищет эту библиотеку в папке проекта, но при запуске собранного файла ему мой libfreetype.so становится не нужен. Я пробовал переименовывать эту свою libfreetype.so в 1.so и тогда проект не собирается, т.е. надо внести изменения и в проект, т.е. тоже там вписать 1.so. Тогда сборка проходит, но после этого 1.so можно вообще удалять - программа всё равно запускается. И я не понимаю, в чем тут дело. Конечно есть варианты: либо у меня эта so каким-то образом является статической, либо она-таки «смотрит» на установленную версию freetype-а.

Если кто-то знает, как это всё в тонкостях работает на linux-ах, то буду рад послушать. Кстати, если кто-то знает, как корректно удалить установленный freetype с Fedor-ы, то это тоже полезная информация.

 ,

Odin_KG
()

RSS подписка на новые темы