Static Compilation for wxWidgets C++

Static Compilation for wxWidgets C++

本文关键字:C++ wxWidgets for Compilation Static      更新时间:2023-10-16

作为初学者,我想指出我花了几个小时试图解决问题,但没有成功。我在Mac上的Clion中使用wxWidgets库编写了一个用于C++的小项目。由于我的大多数同学都在Windows上的VisualStudio中完成了他们的项目,所以没有人能帮助我。该项目必须以可执行文件的形式提交,该可执行文件可以在任何计算机上运行。我想我应该寻找的解决方案是静态编译,它将静态地将所有库链接到可执行文件。我尝试在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})

编辑:我想我没有足够清楚地说明问题。该程序编译良好 - 一切正常。只是每当我尝试将可执行文件(最终应用程序(复制到另一台计算机时,它都不起作用或显示为字符损坏的文本文件,而不是具有 GUI 等的应用程序。

你没有复制正确的东西。 您认为的应用程序可能只是某种启动器。

Mac GUI 应用程序不仅仅由单个文件组成。 您的Indexer应用程序实际上是Apple所说的捆绑包。Finder 将其作为单个实体呈现给用户,但它实际上是一个文件夹。

您可以通过右键单击捆绑包(或 Ctrl+单击(并选择显示包内容来查看捆绑包内部。 如果您想了解更多有关其中的内容的信息,Apple可以在此处记录。

将捆绑包从 A 获取到 B 的一个好方法可能是压缩它。完成此操作后,您将发现静态链接它的努力是否成功。我不知道的是你的构建系统把它放在哪里,但也许这篇文章会有所帮助。 它会被称为Indexer.app,也许聚光灯可以找到它。

要构建具有尽可能少依赖项的 wxWidgets,您不仅应该使用--disable-shared配置它,还应该配置--disable-sys-libs,以防止它使用可能安装在系统上的任何第三方库(例如 libz、libpng 等(。

使用 wxWidgets 构建应用程序后,应确认otool -L YourApp.app/Contents/MacOS/YourApp未显示任何非系统库。