代码之家  ›  专栏  ›  技术社区  ›  Paul Molodowitch

在构建时使用CMADE正确的位置链接到自定义框架,在运行时使用错误的位置

  •  0
  • Paul Molodowitch  · 技术社区  · 8 年前

    所以,我有一个定制的框架,它位于:

    /usr/local/Frameworks/QGLViewer.framework
    

    然后,我的cmakelists.txt中有这些行来使用它:

    list(APPEND CMAKE_FRAMEWORK_PATH "/usr/local/Frameworks")
    find_library(QGLViewer_LIBRARY QGLViewer)
    if(NOT QGLViewer_LIBRARY)
      message(FATAL_ERROR "QGLViewer library not found")
    endif()
    
    ...
    
    add_executable(OpenGLTest ${MY_SOURCES} ${MY_HEADERS} ${MY_UI_HDRS} ${MY_MOC_SRCS})
    target_link_libraries(OpenGLTest
        ${OpenGL_LIBS} 
        ${QT_LIBRARIES} 
        ${QGLViewer_LIBRARY}
        )
    

    当我构建这个时,它构建得很好-它在 /usr/local/Frameworks/QGLViewer.framework 是的。但是,当在运行时链接时,它会失败-尝试在 /Library/Frameworks/QGLViewer.framework ,这不存在。

    如果我这样做了:

    otool -l OpenGLTest
    

    然后我看到这一行:

    Load command 19
              cmd LC_LOAD_DYLIB
          cmdsize 88
             name /Library/Frameworks/QGLViewer.framework/Versions/A/QGLViewer (offset 24)
       time stamp 2 Wed Dec 31 16:00:02 1969
          current version 0.0.0
    compatibility version 0.0.0
    

    ……我认为这意味着错误的位置在运行时被某种方式烘烤到构建中。

    可能是相关的-在某个时候,我把图书馆设在 /库/frameworks/qglviewer.framework ,并在该位置使用它生成我的可执行文件。我可以回到那个布局,它可以工作,但是我想把框架移到 /usr/local/Frameworks ,因为这对于“我的框架”来说更有意义,而且它是所有(brew构建的)qt框架的所在。我想也许是一些dyld缓存造成的,但我试着运行 update_dyld_shared_cache -force ,但没有帮助…

    0 回复  |  直到 8 年前
    推荐文章