作为首发,我想指出,我花了几个小时试图解决问题但没有成功。我在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等的应用程序。
答案 0 :(得分:1)
要构建具有尽可能少的依赖关系的wxWidgets,您应该不仅使用--disable-shared
,还要使用--disable-sys-libs
来配置它,以防止它使用任何第三方库(例如libz,libpng ,. ..)可能安装在您的系统上。
使用wxWidgets构建应用程序后,您应确认otool -L YourApp.app/Contents/MacOS/YourApp
没有显示任何非系统库。
答案 1 :(得分:0)
你并没有复制正确的东西。您认为应用程序可能只是某种启动器。
Mac GUI应用程序不仅包含单个文件。您的Indexer
应用实际上是Apple称之为捆绑包的应用。 Finder将此作为单个实体呈现给用户,但它实际上是一个文件夹。
您可以通过右键单击它(或按住Ctrl键并单击)并选择显示包内容来查看其中的内容。如果您想更多地了解其中的内容,Apple会将其记录为here。
从A到B获取捆绑包的好方法可能是ZIP。完成后,您将发现您静态链接它的努力是否成功。我不知道的是您的构建系统所放置的内容,但也许this post会有所帮助。它将被称为 Indexer.app ,也许Spotlight可以找到它。