• build dynamic libraries for iOS and load them at runtime


    编译了libmt.dylib, 和 test 程序调用,均正常。在xcode中显示调用正常,隐式调用则出现问题。

    提示

    dyld: Library not loaded.

    即使存在在/usr/lib/limt.dylib也同样报错误。 怀疑app运行时没有搜索到此dylib.

      在Mac 平台环境, 动态库(dylib)有一个 “install name”, 这个 安装名字是一个存在动态库里的路径,表明运行时去哪里找库。当连接动态库后,这个路径就保存在二进制文件里,因此程序执行时可以按照这个路径去查找动态库,否则就无法加载此动态库。

    正常可以调用的动态库,通otool工具查看install name.

    Mac-mini:bin root# otool -L libmt.dylib 
    libmt.dylib:
        /usr/lib/libmt.dylib (compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1214.5.1)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
        /usr/lib/libxml2.2.dylib (compatibility version 10.0.0, current version 10.9.0)

    这就意味着要么通过设置环境变量DYLD_LIBRARY_PATH 来查找动态库,否则就只能将动态库放在指定的位置,即install name.

    可以通过install_name_tool 工具设置 install name, 可以通过@rpath关键字指定相对路径到安装目录,通过@executable_path,@loader_path关键字指定路径到运行目录。

    otool 设置install name

     install_name_tool -id "/usr/lib/libmt.dylib" libmt.dylib

    或者相对路径

    install_name_tool -id "@rpath/lib/libmt.dylib" libmt.dylib

    参考

    http://www.chilkatforum.com/questions/4235/how-to-distribute-a-dylib-with-a-mac-os-x-application

    http://stackoverflow.com/questions/4876740/xcode-keeps-searching-dylib-at-wrong-path

  • 相关阅读:
    springboot整合mybatis
    springboot配置mvc拦截器
    ORA-65048:在可插入数据库PDBORCL中处理当前DDL语句时出错 ORA-00959:表空间‘MMMM’不存在
    SI Unit 国际标准单位
    java学习的第二阶段总结
    java学习的第一阶段总结
    vmware学习笔记
    java当中的语法糖
    jvm系统学习笔记
    java中Direct Memory堆外内存
  • 原文地址:https://www.cnblogs.com/iclk/p/4347656.html
Copyright © 2020-2023  润新知