Статическая компиляция для wxWidgets C ++ - PullRequest
0 голосов
/ 29 мая 2018

В качестве начала я хотел бы отметить, что я потратил несколько часов, пытаясь решить проблему без успеха.Я написал небольшой проект с использованием библиотеки wxWidgets для C ++ в Clion на Mac.Поскольку большинство моих одноклассников делали свои проекты в VisualStudio на Windows, никто не мог мне помочь.Проект должен быть сдан в виде исполняемого файла, который будет работать на любом компьютере.Я полагаю, что решение, которое я должен искать, - это статическая компиляция, которая статически связывает все библиотеки с исполняемым файлом.Я попытался добавить некоторые флаги, как показано ниже, в Cmake:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread")

, но это не помогло.У меня нет абсолютно никаких знаний о том, как работает CMake, и я был бы очень признателен за любую помощь.

Весь файл cmake, который у меня сейчас есть:

cmake_minimum_required(VERSION 3.9)
project(Lab3)
set(EXECUTABLE_NAME "Indexer")


set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -Wextra -DWX_PRECOMP")

# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

find_package(wxWidgets COMPONENTS core base REQUIRED)

include(${wxWidgets_USE_FILE})
include_directories(include/ ${wxWidgets_INCLUDE_DIRS})

file(GLOB SOURCES "src/*.cpp")
add_executable(${PROJECT_NAME} main.cpp Source.cpp Source.h)

target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})

РЕДАКТИРОВАТЬ: я думаю, я не указалпроблема достаточно ясно.Программа прекрасно компилируется - все работает.Просто когда я пытаюсь скопировать исполняемый файл (конечное приложение) на другой компьютер, он просто не работает или отображается как текстовый файл с поврежденными символами вместо приложения с графическим интерфейсом и т. Д.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Чтобы создать wxWidgets с как можно меньшим количеством зависимостей, вы должны настроить его не только на --disable-shared, но и --disable-sys-libs, чтобы он не использовал сторонние библиотеки (например, libz, libpng, ...), которыеможет быть установлен в вашей системе.

После создания приложения с помощью wxWidgets вы должны подтвердить, что otool -L YourApp.app/Contents/MacOS/YourApp не отображает несистемные библиотеки.

0 голосов
/ 30 мая 2018

Вы не копируете правильные вещи.То, что вы считаете приложением, - это, вероятно, своего рода пусковая установка.

Приложения Mac с графическим интерфейсом не состоят из одного файла.Ваше Indexer приложение - это то, что Apple называет связкой .Finder представляет это пользователю как единое целое, но на самом деле это папка.

Вы можете заглянуть внутрь пакета, щелкнув по нему правой кнопкой мыши (или Ctrl + щелчок) и выбрав Показать содержимое пакета .Если вы хотите немного больше узнать о том, что там, Apple документирует это здесь .

Хороший способ получить пакет от A до B - это отправить его в ZIP-формате.Как только вы это сделаете, вы узнаете, были ли ваши попытки статически связать его успешными.Что я не знаю, так это то, куда ваша система сборки поместила его, но, возможно, этот пост поможет.Он будет называться Indexer.app , может быть Spotlight сможет его найти.

...