zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HBase启动遇到Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0警告
    hadoop伪分布式安装之Linux环境准备
    个人作业收官——软件工程实践总结
    K米测试
    K米评测
    第三次作业-结对编程
    关于第二次作业的改进之处
    第二次作业——结对项目之需求分析与原型设计
    调研《构建之法》指导下的全国高校的历届软工实践作品
    PSP总结报告
  • 原文地址:https://www.cnblogs.com/iclk/p/4347656.html
Copyright © 2011-2022 走看看