gpt4 book ai didi

c++ - 如何使用 CMAKE 在 OSX 包中包含库

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:43:27 26 4
gpt4 key购买 nike

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

    dyld: Library not loaded: libxl.dylib    Referenced from:     /path/to/executable/      Reason: image not found

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

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

请参阅下面的 CMakeLists.txt

    cmake_minimum_required(VERSION 3.7)    project(project name)    set(CMAKE_CXX_STANDARD 14)    set(SOURCE_FILES main.cpp)    find_package( Qt5Core REQUIRED )    find_package( Qt5Widgets REQUIRED )    find_package( Qt5Gui REQUIRED )    set(PROJECT_LINK_LIBS libxl.dylib)    link_directories(${CMAKE_SOURCE_DIR}/LibXL/lib)    include_directories(${CMAKE_SOURCE_DIR}/LibXL/include_cpp)    #Mac Bundle (Built on 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} )

最佳答案

在 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 以添加可执行文件找到它的库的相对路径。框架不需要这部分,因为它们具有标准化的文件夹结构,并且可执行文件会在其中查找其依赖项。

关于c++ - 如何使用 CMAKE 在 OSX 包中包含库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com