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

  • 相关阅读:
    showModalDialog()、showModelessDialog()方法使用详解
    Oracle 8i在GNU/Linux上的安装笔记
    TURBOLinux 7.0下安装Oracle 8.1.7.0.1 release 3
    [Oracle]初识Oracle8i(8.0.5)
    (三)
    退出win不保存设置
    Windows 2000/NT/XP管理员密码丢失解决方法
    DCOM错误:DefaultLaunchPermssion 访问被拒绝
    找到一些工具
    O/R MAP 和 ObjectSpaces 资料
  • 原文地址:https://www.cnblogs.com/iclk/p/4347656.html
Copyright © 2011-2022 走看看