• iOS 打包静态库.a文件

    2015-10-28 09:14:21
    3、将需要暴露的.h文件暴露出来,.m会自动编译到.a文件中 4、分别选择真机设备和模拟器,command + B编译,staticTest会从红色变成黑色。真机和模拟器环境下用的.a文件是分开的。 5、在“Show in Finder ”,可以...

    制作.a

    1、新建项目 –> Cocoa Touch Static Library
    这里写图片描述

    2、添加库需要包含的代码
    这里写图片描述

    3、将需要暴露的.h文件暴露出来,.m会自动编译到.a文件中
    这里写图片描述

    4、分别选择真机设备和模拟器,command + B编译,staticTest会从红色变成黑色。真机和模拟器环境下用的.a文件是分开的。
    这里写图片描述

    5、在“Show in Finder ”,可以看到编译生成的.a 和 暴露的.h文件。
    这里写图片描述
    这里写图片描述


    Note:
    - Debug-iphoneos 文件夹里面的东西是用在真机上的
    - Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的
    - 如果 Scheme 是 Release 模式,生成的文件夹就以 Release 开头
    调试版本 VS 发布版本
    - 调试版本会包含完整的符号信息,以方便调试
    - 调试版本不会对代码进行优化
    - 发布版本不会包含完整的符号信息
    - 发布版本的执行代码是进行过优化的
    - 发布版本的大小会比调试版本的略小
    - 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升


    当我们需要打包的.a文件里面用到了图片等资源文件。此时我们不该直接把resource文件夹拖进项目,而是建立.bundle文件,然后把图片等资源放进.bundle里面管理。
    这里写图片描述
    这里写图片描述
    在其他项目中使用我们打包的.a文件时,只需要将.a文件和暴露的.h文件以及资源文件.bundle(有Xib时还需要拖Xib)拖进新项目即可使用。


    1. 如果想要使打包好的.a文件能同时在模拟器和真机上使用,需要将两个.a文件进行合并。在终端输入指令:
    lipo -create ~/Debug-iphoneos/libstaticTest.a ~/Debug-iphonesimulator/libstaticTest.a -output ~/libstaticTest.a

    即: lipo -create + 真机.a文件路径 + 模拟器.a文件路径 + -output + 合成.a文件的路径
    PS:可以通过 lipo -info .a文件路径 指令查看.a的类型


    调试.a

    1、创建一个application工程,可以正常运行。
    这里写图片描述

    2、此时我们需要在这个工程里添加静态库进行调试,点击targets下面的+号,添加libriary
    这里写图片描述
    3、此时在工程里面会出现静态库的文件夹,在此文件夹下面添加需要打包静态库的代码即可。
    这里写图片描述

    4、使用静态库,只需要将需要暴露的头文件引入project的类里。同时需要配置targets -> build Phases 下的Target Dependencies 和Link Binary With Libraries 添加我们创建的静态库.a。
    这里写图片描述

    5、打包静态库只需要选中静态库编译即可。具体打包方法同上。
    这里写图片描述

    展开全文
  • Ios Xcode工程添加.a文件引起错误的几种修改方法(一般是微信的.a静态库出错) 一、 TARGETS -> Build Settings-> Search Paths下 1. Library Search Paths 删除不存在的路径,保留.a文件的路径(此处显示的为...

    Ios Xcode工程添加.a文件引起错误的几种修改方法(一般是微信的.a静态库出错)

    一、     TARGETS -> Build Settings-> Search Paths下

    1.  Library Search Paths 删除不存在的路径,保留.a文件的路径(此处显示的为绝对路径)。

    间接性点击两下.a文件的路径,使它变成类似文件夹重命名的样式(或者直接双击路径,则可弹出一个带有加减号的小框),查看此时显示的路径是否为相对路径,不是则修改成相对路径(一般情况下,系统都会默认生成相对路径)。

    显示相对路径名称时,/之间的名称必须是连接起来的,可以用_连接,中间不能有空格。因为此处的路径遇到空格会自动折行,使原本一行的路径变成两行或多行显示,导致路径错误。如果有空格,则在空格前加\ ,使之变成一行。

    最后的效果如图


    或者


    2.  Framework Search Paths 删除所有不存在的路径(即此处路径存在,但文件不存在了)

    二、TARGETS -> Build Settings ->Architectures下

    1. Build Active Architectures Only 是Yes改成No,是No改成Yes。

    2.  如果不支持64位,可以把 ValidArthitectures 中的armv64去掉

    展开全文
  • nm命令可以列出一个函数库文件中的符号表。它对于静态的函数库和共享的函数库都起作用。对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号...
    一、概述
    

    nm命令可以列出一个函数库文件中的符号表。它对于静态的函数库和共享的函数库都起作用。对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多少行定义的,不过这必须要求编译该函数库的时候加“-l”选项。 

    关于符号的类型,这里我们再多讨论一下。符号的类型是以一个字母的形式显示的,小写字母表示这个符号是本地(local)的,而大写字母则表示这个符号是全局的(global,externel)。一般来说,类型有一下几种:T、D、B、U、W。各自的含义如下:T表示在代码段中定义的一般变量符号;D表示时初始化过的数据段;B表示初始化的数据段;U表示没有定义的,在这个库里面使用了,但是在其他库中定义的符号;W,weak的缩写,表示如果其他函数库中也有对这个符号的定义,则其他符号的定义可以覆盖这个定义。 

    二、nm命令详述:

    用途

    查看函数库.a函数符号信息

    显示关于对象文件、可执行文件以及对象文件库里的符号信息。


    语法

    nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B -P ] [ -e -g | -u ] [ -d -o -x -t Format ] File ...


    描述

    nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。 nm 命令缺省情况下报告十进制符号表示法下的数字值。

    nm 命令把以下符号信息写入标准输出:对象名,如果您指定了 -A 选项,则 nm 命令只报告与该文件有关的或者库或者对象名。

    • nm 命令使用以下符号(用同样的字符表示弱符号作为全局符号)之一来表示文件符号类型:

      • 符号名称    符号类型
      A Global absolute 符号。
      a Local absolute 符号。
      B Global bss 符号。
      b Local bss 符号。
      D Global data 符号。
      d Local data 符号。
      f 源文件名称符号。
      T Global text 符号。
      t Local text 符号。
      U 未定义符号。
    • 如果可应用,nm 命令报告与符号有关的大小。

    标志

    -A 每行或者显示全路径名称或者显示对象库名。
    -B 在 Berkeley 软件分发(BSD)格式中显示输出: 

    值   类型   名称
    -C 限制解码(demangle) C++ 名称。缺省是解码所有 C++ 符号名。 
    注:
    C++ 对象文件中的符号在被使用前它们的名称已经被解码了。
    -d 用十进制显示符号的值和大小。这是缺省的。
    -e 只显示静态的和外部的(全局)符号。
    -f 显示完整的输出,包括冗余的 .text、 .data 以及 .bss 符号,这些在通常都是被限制的。
    -g 只显示外部的(全局)符号。
    -h 限制输出头数据的显示。
    -l 通过给 WEAK 符号的编码键附加一个 * 来区分 WEAK 和 GLOBAL 符号。如果和 -P 选项一起使用, WEAK 符号的符号类型显示如下: 
    Weak Data 符号 
    Weak Text 符号 
    Weak 未定义符号 
    Weak bss 符号 
    -o 用八进制而不是十进制数来显示符号的值和大小。
    -P 以标准可移植输出格式显示信息: 

    库/对象名  名称   类型   值   大小

    该格式以十六进制符号表示法显示数字值,除非您用 -t-d 或 -o 标志指定不同的格式。

    如果您指定了 -A 标志 -P 标志只显示 库/对象名字段。同样,-P 标志只显示大小适用的符号大小字段。

    -p 不排序。输出按符号表顺序打印。
    -r 倒序排序。
    -T 把可能会溢出它的列的每个名字截短,使显示的名字的最后一个字符是星号(*)。缺省情况下,nm 显示列出的符号的全名,并且一个比为其设置的列的宽度长的名称会引起名称后的每个列无法对齐。
    -t Format 显示指定格式下的数字值,其中 Format 参数是以下符号表示法之一: 
    d
    十进制符号表示法。这是 nm 命令的缺省格式。 
    o
    八进制符号表示法。 
    x
    十六进制符号表示法。 
    -u 只显示未定义符号。
    -v 按值而不是按字母表顺序排序输出。
    -x 用十六进制而不是十进制数来显示符号的值和大小。
    -X mode 指定 nm 应该检查的对象文件的类型。 mode 必须是下列之一: 
    32 
    只处理 32 位对象文件 
    64 
    只处理 64 位对象文件 
    32_64 
    处理 32 位和 64 位对象文件 

    缺省是处理 32 位对象文件(忽略 64 位对象)。 mode 也可以 OBJECT_MODE 环境变量来设置。例如,OBJECT_MODE=64 使 nm 处理任何 64 位对象并且忽略 32 位对象。 -X 标志覆盖 OBJECT_MODE 变量。

    注:
    nm 命令支持 -- (双连字符)标志。如果文件名会被曲解为一个选项,该标志区别于 File 操作数。例如,要指定文件名以连字符开始,请使用 -- 标志。

    退出状态

    该命令返回下列出口值:

    0 成功完成。
    >0 发生错误。

    示例

    1. 列出 a.out 对象文件的静态和外部符号,请输入: 

      nm -e a.out
    2. 以十六进制显示符号大小和值并且按值排序符号,请输入: 

      nm -xv a.out
    3. 显示 libc.a 中所有 64 位对象符号,忽略所有 32 位对象: 

      nm -X64 /usr/lib/libc.a

    文件

    /usr/ccs/bin/nm 包含 nm 命令。
    展开全文
  •  在应用中,有些公共的代码需要反复使用 的代码,希望隐藏代码的具体实现,可以把这部分代码做出静态库(.a文件);如果提供库的源代码称为开源库(能看见.h也能看见.m文件),不提供源代码的库称为闭源库(静态库...

    一、静态库定义:

            在应用中,有些公共的代码需要反复使用 的代码,希望隐藏代码的具体实现,可以把这部分代码做出静态库(.a文件);如果提供库的源代码称为开源库(能看见.h也能看见.m文件),不提供源代码的库称为闭源库(静态库,动态库)

    二、静态库的特点:

          ios在代码执行过程中的各种文件:.c文件(源代码) .o文件(编译产生的文件) .exe文件(可执行文件);静态库链接时会将库文件完整的拷贝到可执行程序,若多个程序使用到静态库,每个文件都会讲此静态库文件拷贝一份。而动态库不会将库都拷贝到用到此库的文件中,而只会将此动态库的标签传到每一个使用此库的文件中(此标签只告诉了此库的地址)链接时会将库文件完整的拷贝到可执行程序。多个程序使用到动态库,都会引用这个动态库资源的地址。注:链接即为将.o文件转变为.exe文件的过程

    三、静态库(.a)文件的生成:

          ios静态库的体现是.framework文件及.a文件两种。

          1.创建静态库工程:

        

      2.刚创建的静态库的.a工程如下:

      

    并在.h文件声明方法,在.m中实现该方法。

    3.创建真机的静态库文件:

    选中通用设备 编译 静态库由红色变为黑色  文件夹中只有.h(其实.m也进去了) 通过选中target—BuildPhase—-Compile Source 查看.m文件  在Copy Files 中查看.h文件


    4.通过选中变黑的静态库文件,show in finder 查看如下:


    libcreateStaticLib.a即为生成的静态库文件,因为编译时选择的是通用设备所以此静态库存在于 Debug-iphoneos文件夹下。将此文件夹复制出来待用。

    5.创建模拟器的静态库文件:

    先将上步生成的真机的静态库删除,再生成模拟器的静调库文件。防止受上步生成的静态库文件的影响。选中任一模拟器,编译即可生成。

    6.show in finder查看,如下:


    因为是模拟器的静态库故放在Debug-iphonesimulator文件夹下,将此文件夹拷贝出来与上边的模拟器的文件夹放在同一文件夹下待用(方便真机与模拟器的静态库合并)

    7.使用静态库:

    真机:将真机版的静态库文件.a 及.h文件导入到目标工程中,通过静态库的.h文件调用方法即可。

    模拟器静态库的使用方法同真机。

    注意:模拟器的静态库文件只能用于模拟器,而真机的静态库只能用于真机,错误使用会崩溃,如果模拟器的静态库放在真机上运行或真机的静态库放在模拟器上运行,都会产生如下错误:


    未找到createStaticLib类。

    8.合并静态库:

    为了避免上述错误,最好将模拟器的静态库与真机的静态库合并,防止在模拟器与真机切换时,还需要更换静态库的麻烦事。

    合并方法如下:

    将Debug-iphoneos与Debug-iphonesimulator文件放在同一文件夹下,使用终端 切换至此目录下,执行终端的ls命令,确保此目录下只有这两个Debug开头静态库文件夹,然后执行如下终端命令:lipo -create Debug-iphoneos/libCreateStaticLib.a  Debug-iphonesimulator/libCreateStaticLib.a  -output mylib.a

    此时,会在与两个Debug文件并列的位置产生名为mylib.a的静态库文件,此文件通用于真机及模拟器。


    展开全文
  • 问题:iOS怎么查看.a静态库所有打包进去的.o文件和函数接口信息? 答案:其实就是使用 nm 命令,这个跟linux的命令是一样的。 正文: 本文来自 ...

    前言:

    问题:iOS怎么查看.a静态库所有打包进去的.o文件和函数接口信息?

    答案:其实就是使用 nm 命令,这个跟linux的命令是一样的。


    正文:

    本文来自 http://www.cnblogs.com/itech/archive/2012/09/16/2687423.html

    感谢原创作者和转载者


    Linux的nm查看动态和静态库中的符号

    功能

    列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等等。


    使用

    nm [option(s)] [file(s)]

    有用的options:

    • -A 在每个符号信息的前面打印所在对象文件名称;
    • -C 输出demangle过了的符号名称;
    • -D 打印动态符号;
    • -l 使用对象文件中的调试信息打印出所在源文件及行号;
    • -n 按照地址/符号值来排序;
    • -u 打印出那些未定义的符号;

    常见的符号类型:

    • A 该符号的值在今后的链接中将不再改变;
    • B 该符号放在BSS段中,通常是那些未初始化的全局变量;
    • D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
    • T 该符号放在代码段中,通常是那些全局非静态函数;
    • U 该符号未定义过,需要自其他对象文件中链接进来;
    • W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。

    注意几点:

    • -C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
    • 使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc
    • 使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。


    举例

    更详细的内容见man page。这里举例说明:

    nm -u hello.o
    显示hello.o 中的未定义符号,需要和其他对象文件进行链接.
    nm -A /usr/lib/* 2>/dev/null | grep "T memset"

    在 /usr/lib/ 目录下找出哪个库文件定义了memset函数. 


    展开全文
  • iOS .Crash文件分析处理办法 -symbolicatecrash
  • 我们iOS项目打包后生成的.app文件到底长什么样呢?我们来看一下: 首先在打包好的文件夹下找到.app文件,然后解压: 上图是解压后的文件目录:Symbols文件夹下有一个.symbols的符号文件文件作用暂不清楚,...
  • 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的框架,估计也是类似动态...
  • 用Excel或者Numbers都可以导出CSV格式的数据CSV文件的规则:  0. 开头是不留空,以行为单位。  1. 可含或不含列名,含列名则居文件第一行。   2. 一行数据不垮行,无空行。  3. 以半角符号,作分隔符,列为空也...
  • 符号文件.dSYM实际上是从Mach-O文件中抽取调试信息而得到的文件目录,实际用于保存调试信息的文件是DWARF,其出身可以从这篇文章了解。 这个是我T9项目导出文件路径 /Applications/Xcode.app/Contents/...
  • 无论是我们自己搭建的框架还是直接使用各种第三方收集框架,我们拿到的方法栈调用信息通常都是一些符号,为了能够从这些符号中获取正确的方法名,我们需要在线上包对应的dSYM文件帮助下进行符号化,进而得到明确的...
  • .dSYM文件其实是一个目录,在子目录中包含了一个16进制的保存函数地址映射信息的中转文件,所有Debug的symbols都在这个文件中(包括文件名、函数名、行号等),所以也称之为调试符号信息文件。 一般地,Xcode项目每次...
  • 序 在日常开发中,app难免会发生崩溃。简单的崩溃还好说,复杂的崩溃就需要我们通过解析Crash文件来分析了,解析Crash文件iOS开发中是
  • iOS之解析ips文件

    2020-04-22 19:34:23
    iOS之解析ips文件导出ips文件dSYM配合symbolicatecrash配合执行解析 导出ips文件 途径一: 手机连接Xcode查看和导出 Xcode -> Window -> Devices and Simulators -> View Device Logs 途径二: 直接在手机...
  • iOS app的所有崩溃记录都会记录在设备上,所以对于和我一样没有集成让用户发送崩溃报告功能的iOS开发者来说,要获得crash文件就必须先连上崩溃过的 机器,然后打开Xcode,选择Window -> Devices,选择你自己的机器...
  • 摘要: iOS静态库 ...iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。 二、静态库与动态库的区别? 静态库: 链
  • xcode7.3 命令行工具 symbolicatecrash 在如下目录中 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources
  • Bundle 文件,简单理解,就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个 Bundle 文件。方便在其他项目中引用包内的资源。 Bundle 文件是静态的,也就是说,我们包含到包中的资源文件作为一个...
  • Mac平台下使用nm命令查看文件符号
  • GCC/G++ 符号导出控制

    2019-06-13 16:17:26
    2019独角兽企业重金招聘Python工程师标准>>> ...
1 2 3 4 5 ... 20
收藏数 3,335
精华内容 1,334