【问题标题】:How to include libraries in OSX bundles with CMAKE如何使用 CMAKE 在 OSX 捆绑包中包含库
【发布时间】:2017-11-09 07:35:26
【问题描述】:

我正在尝试使用 Clion 和 Cmake 构建 OSX 包,目前库链接正确,因为我没有预编译错误,但是当我构建并尝试运行程序时,出现以下错误

dyld:库未加载:libxl.dylib 参考自: /路径/到/可执行文件/ 原因:找不到图片

我已经搜索过这个问题,但似乎找不到明确的解决方案,这可能是由于我缺乏 CMake 和 C++ 的经验。

如果有人有解决方案或可以指出我应该阅读的方向以进一步理解这一点,我将不胜感激。

请参阅下面的 CMakeLists.txt

cmake_minimum_required(版本 3.7) 项目(项目名称) 设置(CMAKE_CXX_STANDARD 14) 设置(SOURCE_FILES main.cpp) find_package(Qt5Core 需要) find_package(需要 Qt5Widgets) find_package(需要 Qt5Gui) 设置(PROJECT_LINK_LIBS libxl.dylib) 链接目录(${CMAKE_SOURCE_DIR}/LibXL/lib) 包含目录(${CMAKE_SOURCE_DIR}/LibXL/include_cpp) #Mac 捆绑包(在 Mac 上构建) add_executable(project_target_mac MACOSX_BUNDLE main.cpp) qt5_use_modules(project_target_mac Core Widgets Gui) target_link_libraries(project_target_mac Qt5::Widgets) target_link_libraries(project_target_mac ${PROJECT_LINK_LIBS} ) #set_target_properties(project_target_mac PROPERTIES INSTALL_RPATH "${CMAKE_SOURCE_DIR}/LibXL/lib") add_executable(project_target ${SOURCE_FILES}) qt5_use_modules(project_target Core Widgets Gui) target_link_libraries(project_target Qt5::Widgets) target_link_libraries(project_target ${PROJECT_LINK_LIBS })

【问题讨论】:

标签: c++ macos cmake clion dylib


【解决方案1】:

在 OSX 上,人们通常使用框架并将其集成到带有安装规则的应用程序包中。

规则如下:

    install( DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/ofxSyphon/libs/Syphon/lib/osx/Syphon.framework"
    DESTINATION ${APP_NAME}.app/Contents/Frameworks")

然后框架文件夹将被复制到应用程序包的Contents/Frameworks 子文件夹中。 为此,应用程序本身应安装以下内容:

install(TARGETS ${APP_NAME} DESTINATION .)

您可能希望使用CMAKE_INSTALL_PREFIX 指定安装前缀,默认为/usr/local

对于单个库文件,过程非常相似,但您还必须调整应用程序的RPATH 以添加库的相对路径,以便可执行文件找到它。框架不需要这部分,因为它们具有标准化的文件夹结构,并且可执行文件会查看它的依赖关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2019-03-09
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多