首页
学习
活动
专区
圈层
工具
发布

iOS符号冲突(duplicate symbols)

duplicate symbol _OBJC_CLASS_$_SSUser的错误。...加载特定静态库的全部类,与-all_load类似但是只限定于特定静态库,所以-force_load需要指定静态库;当两个静态库存在同样的符号时,使用-all_load会出现duplicate symbol...的错误,此时可以选择将其中一个库-force_load;(需要注意两个库的版本是不是一致的) 所以这里的直接编译通过的原因:工程中已经有了SSUser类的符号,所以链接的时候会直接使用工程中的SSUser...符号,所以编译运行完的结果是调用了工程中的SSUser类,静态库中的SSUser并没有被链接。...此时终于复现了之前的符号冲突: duplicate symbol _OBJC_CLASS_$_SSUser in: /Users/loyinglin/Library/Developer/Xcode

4.9K30

从Xcode10不再支持libstdc++说起

某个静态库如果以前是依赖于libstdc++库中的代码,那么这个静态库在Xcode10中被链接时将会报符号找不到的链接错误信息:Undefined symbols for architecture XXX...一旦在程序中调用那个同名函数时,就会出现函数重复定义或者引入不明确的链接错误。...} namespace std { } 因此可以明确早期的C++标准库中的所有类和函数以及变量都是定义在std这个命名空间中的。...那既然在Xcode10中报链接错误,又怎么解决这种问题呢?方法有两个: 一个是将你所导入的静态库重新编译,将静态库所依赖的标准库升级为libc++.dylib。...中对于C++标准库的头文件都是基于C++11的,因此当你通过上述方法引入了老版本的C++标准库时,虽然在编译链接时不会报错正常编译通过,但是在运行时就可能会出现崩溃的问题,尤其是当你的静态库中将某个老的

2.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【IOS开发进阶系列】Framework制作专题

    下制作通用静态库         上面我们也提到了,这样生成的动态库恐怕很难在xCode5上使用,那我们为什么非要用动态库呢,一般情况下不是用静态库就好了吗?...只需要修改一个参数即可生成静态库了。         使用静态库的话,就可以把Framework从‘Embedded Binaries’中删除了。亲测在xCode5下可用。...,回报大量duplicate symbol重复标识错误。         ...就会导致重复引用问题,原因也很简单,因为b.f编译生成framework时引入了a.f时,而c.f编译时也会引入a.f,由此在d.f中同时引用b.f与a.f时,就会造成循环引用问题了。...解决方案是:         在各个工程中引用依赖framework工程时,只声明在TargetDependencies中(这需要将依赖工程置于当前Framework工程子目录中),也在d.f工程的TargetDependencies

    77530

    IOS开发问题索引(七)

    突然编译不通过,报错不支持64位 此种场景出现在将project中32位第三方库替换成64位时,project中如何存在相同的第三方库,最好把原来32位相同的库删除,再添加。...方法(obj-c的协议protocol就是java的接口interface,就是C++的纯虚函数),然后把该自定义的类对象编码到NSData中,再从NSUserDefaults中进行读取。...如果一个自定义类中由另一个自定义类对象,那么所有嵌套的类都要实现。...duplicate symbols错误问题 ld: 282 duplicate symbols for architecturei386 clang: error: linker command failed...http://blog.sina.com.cn/s/blog_5df876f30102v9rd.html 21 【编译】存在大量重复定义的标记 原因: 在静态方法中使用了非静态的字符串常量

    1.3K40

    Xcode中和symbols有关的几个设置

    ... ... .debug:一个调试符号表,其条目是程序中定义的局部变量和类型定义,程序中定义和引用的全局变量,以及原始的C源文件。只有以-g选项调用编译驱动程序时才会得到这张表。...Objective-C不会为方法定义链接符号,只会为类定义链接符号。 可以在终端中用nm命令查看一个可重定位文件或可执行文件的符号表,其中加上-a参数可以显示包括调试符号在内的所有符号。...在Xcode中查看构建过程,可以发现,当Generate Debug Symbols选项设置为YES时,每个源文件在编译成.o文件时,编译参数多了-g和-gmodules两项。...如果选择debugging symbols的话,函数调用栈中,类名和方法名还是可以看到的。 如果我们构建的不是一个app,而是一个静态库,需要注意,静态库是不可以strip all的。...想想符号在重定位时的作用,如果构建的静态库真的能剥离所有符号,那么它也就没法被链接了。

    2.4K30

    扒虫篇-Bug日志 Ⅲ

    解决方案 由于xcode中设置了当所有异常出现时的全局断点,这是问题的关键。 解决办法是将all改为Objective-C: ? Paste_Image.png 问题解决。 4....Snip20170207_9.png 在集成 萤石SDK的时候,把应该添加的 系统类库都添加完了后,编译还是报这个错误,而原Dome中运行正常。...Snip20170208_2.png 这是使用SDWebImage 类库报的错,不知道什么原因,一样的代码在另一个工程中就不会出出现这样的报错,好无语。...C/C++ 头文件引用问题 include 引用编译器的类库路径下的头文件 include “” 引用工程目录的相对路径的头文件 include 是编译指令,在编译时,编译器会将相对路径替换成绝对路径...在工程设置中的Build Phases下删除Check Pods Manifest.lock及Copy Pods Resources 然后我删除了pods 工程,运行原工程时,报错,找不到一个路径。

    1.5K20

    lnk2001 lnk1120_lnk1120

    4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。   5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。...当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。   函数内声明的变量(局部变量) 只能在该函数的范围内使用。   C++ 的全局常量只有静态连接性能。...6.当在基类中创建了虚函数而没有在基类中对虚函数做具体的实现时将会产生LNK2001错误。解决办法是:①、将该虚函数定义为纯虚函数。②、在基类中对该虚函数做具体实现。   ...无法解析的外部符号“symbol”,该符号在函数“function”中被引用 在 function 中找到了未定义的外部符号 (symbol)。若要解决此错误,请提供符号定义或移除引用它的代码。...符号定义为静态,但稍后在文件外部被引用。 没有定义静态类成员。

    1.4K20

    代码管理| 手把手教你封装自己的静态库SDK

    在我们的日常开发中,经常会用到各种已经封装好的库,比如支付宝、微信SDK等等中的库,这些库可以给我们的开发带来很大的便利。...接下里就是设置我们有那些头文件是需要公开的,如下图设置: 自定义Framework出现 在#include出现:Could not build module ‘x’的错误提示,并且在...Framework的工程中有提示找不到头文件 原因是没有把对外部公开的类中,在.h引用到的类,放到pulbic里面 还要记得把要公开的类添加到我们的JWJFramework.h中: #import...静态库用了某第三方库,项目也用了同样的第三方库,在编译的时候就会有 duplicate symbol 错误, 因为有两份同样的第三方库。...解决办法就是把用到的第三方库加上自定义前缀,包括类名、delegate 协议、常量名, 尤其需要注意 Category 的方法名要修改。

    1.6K10

    Xcode 常见 CLI 工具

    并且还能解决另外问题,就是如果我们装有多个 Xcode,我们在使用 CLI 相关工具时,系统就会不知道该去使用哪个版本或者哪个位置的 CLI,使用这个工具可以帮助我们设置及切换当前默认使用的 CLI。...当然这套工具包有些命令不在/usr/bin路径下,我们就需要在命令前加上xcrun了,如swift-demangle,如果我们直接使用swift-demangle就会出现命令找不到的错误,使用xcrun...在 Xcode 中如果不做特殊指定,debug information 是被保存在 executable 文件中。...swift-demangle 在 Swift 中因为命名空间的原因,需要对类名进行mangle,如果需要显示正确名称,自然也需要demangle。...; B 该符号放在 BSS 段中,通常是那些未初始化的全局变量; D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量; T 该符号放在代码段中,通常是那些全局非静态函数; U 该符号未定义过,

    4.3K21

    ​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

    它会读取Mach—O对象文件的OC部分(工具只对mach-o和fat类型的文件有用,如果是想混淆自定义的静态,需要稍微转换一下策略),并解析其中所有的类、属性、方法、实例变量,之后添加所有的symbols...这个工具还会查找工程内的xcdatamodel文件并添加其中的类和属性名到禁止列表。 在编译期间内,所有定义在头文件内的symbol都会用对应的生成的不同的符号替换并编译。...注意 iOS-Class-Guard不混淆system symbol,所有如果在自定义类中的某些属性和方法与system symbol有相同的名字,则不会被混淆。...,否则你在启动app时,他们不会再有效。...串行化如果使用保存在磁盘上的类 或者 用户默认使用了NSCoding协议,那么就不能混淆他们了。否则,再次生成symbol后,APP在启动时会crash,不能从串行化数据中读取该类。

    59510

    Xcode other link flag参数详解和解决静态库冲突分析

    1.Xcode设置Other Link Flag 先猜一下这个参数,Other Link Flag 其他链接标志,从字面上的意思来看,肯定代码链接的时候有关和链接器有关。...这样的话,如果静态库中定义了已存在的一个类的分类,链接器就会以为这个类已经存在,不会把分类和核心类的代码合起来。这样的话,在最后的可执行文件中,就会缺少分类里的代码,这样函数调用就失败了。...简单说来,加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中,虽然这样可能会因为加载了很多不必要的文件而导致可执行文件变大,但是这个参数很好地解决了我们所遇到的问题...当静态库中只有分类而没有类的时候,-ObjC参数就会失效了。这时候,就需要使用-all_load或者-force_load了。...假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用

    2.9K20

    研读《程序员的自我修养—链接、装载与库》

    举例:一个汇编指令 jmp foo 由汇编器在每次汇编程序的时候,重新计算foo这个符号的地址。 符号(Symbol)表示的是一个地址,可能是函数的起始地址,也可能是变量的起始地址。...静态链接 静态链接:链接器在链接时将静态库合并到可执行程序。...它要解决其他共享对象的依赖问题,不能依赖其他共享对象; 外部符号:在本目标文件引用但没有定义的符号;(External Symbol) 当多个同名符号冲突的时候,先装入的符号优先,这种优先级方式成为装载序列...结果思考 Xcode工程link设置上的动态库,会在程序启动时加载到内存,即使你没有用到这个库的函数;(测试代码中没有用到BLib动态库的代码,但是启动即加载了BLib) dispatch_after...Other Linker Flags -ObjC,告诉链接器把库中定义的Objective-C类和Category都加载进来;(如果静态库中有类和category的话,需要添加这个标志) -all_load

    1.7K70

    Xcode自带iOS测试方法

    在说Xcode自带测试方法前先讲下程序在内存中的空间划分, 一般可分为5个部分: #1. BSS段, 存放未初始化的全局变量. BSS是英文Block Started by Symbol的简称。...BSS段属于静态内存分配。 #2. 数据段, 存放已初始化的全局变量和全局静态变量. 数据段属于静态内存分配 #3. 代码段, 存放程序执行代码 #4....栈 , 存放函数的参数值和局部变量, 由编译器自动分配和释放. 常说的内存管理是对堆内存的管理. 内存泄露指动态分配开辟出来的空间, 在使用完毕后未释放, 或者未被回收直至程序结束....Xcode自带有一套测试工具 Analyze - 静态分析 如下图位置: ? 会自动检查代码中是否有以下错误: #1. 是否创建了一个对象, 但并没有使用它 #2....如果有内存泄露的话会在Leak check那一行出现x的符号 点击x符号能看到详细错误信息 ? Allocations - 内存分配检查 界面如下图 ?

    95220

    Q音直播编译优化与二进制集成方案

    可以看出单个文件编译耗时比较久的很多是c++或oc/c++混编文件,果然引入c++静态库对iOS来讲就是编译灾难。高居首位的是KSIMSDK中的一个混编文件,其中大部分逻辑是拿c++写的。...其他方案 ccache 在XCode9编译存在一个bug,pch会在无任何改动时触发重新编译,由此导致所有依赖pch的文件都会重新编译,产生预期外的全量编译。...静态库pod集成 将pod源码打包成静态库后静态库本身再集成到pod引入到主工程中。 集成在framework中的资源直接导入并不会生效,在静态库的podspec中写好资源引入。...尽量减少在头文件中引入其他类,多使用前向声明。枚举的引入尽量跟类定义拆开。 对于实现协议需要引入头文件可以将协议放到.m文件的类extension中,不必放在头文件类的声明处。...不到万不得已头文件中不要引c++静态库。 oc/c++混编或纯c++文件编译编译耗时很大,酌情使用。 工程配置类的耗时优化基本上有效的XCode都已默认开启,只需检查一下是否被关闭即可。

    3.9K41

    C++使用非常量静态成员(non-const static data member)

    非常量静态成员的错误使用方法 静态成员只跟类有关,是所有对象共有的属性,如果在类中初始化则意味着每个对象都初始化一次,这样就需要非静态成员了。...非常量静态成员函数不可以在类中初始化,一定要在类外把类名作为命名空间而初始化,但放在private里又只能在类里初始化,这种操作是无法实现的。...但C++支持在类里定义非常量静态成员函数,如"static double average(){...};"。 误区二:在函数体内对非常量静态成员变量初始化。...(xcode有提示)正确的方法是将初始化语句放到函数体外定义(在类中只有声明),然后在函数内以class::member的方式调用。 ?...非常量静态成员的错误使用方法 综上,非常量静态成员变量需要在类的public中声明,在函数体外类外定义,以classname::member的方式使用。

    6.8K30
    领券