如何通过CMAKE在OSX捆绑软件中包含库

问题描述 投票:2回答:1

我正在尝试使用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)link_directories($ {CMAKE_SOURCE_DIR} / LibXL / lib)include_directories($ {CMAKE_SOURCE_DIR} / LibXL / include_cpp)#Mac Bundle(在Mac上内置)add_executable(project_target_mac MACOSX_BUNDLE main.cpp)qt5_use_modules(project_target_mac核心小部件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核心小部件Gui)target_link_libraries(project_target Qt5 :: Widgets)target_link_libraries(project_target $ {PROJECT_LINK_LIBS})
c++ macos cmake clion dylib
1个回答
0
投票
在OSX上,男人通常使用Frameworks并将其与安装规则集成到应用程序捆绑包中。

规则看起来像:

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

© www.soinside.com 2019 - 2024. All rights reserved.