什么是符号冲突,就是库与库之间有相同的符号,使用者不知道用哪个;例如:A SDK有个符号a,B SDK也有个符号a,最终app调用a时,可能用的是A SDK的a,也可能是B SDK的a;这样的话,就会产生歧义,假如app想调用A SDK的a,但可能实际调用的却是B SDK的a,这样就会造成app行为异常,或是崩溃。
静态库冲突经常会遇到下面几个问题:
def symsGlobal
def symsAppCall
for (sym in symsAppCall) {
if (symsGlobal dont found sym) {
for (symsObj in symsObjs) {
if(symsObj found sym) {
if(symsGlobal dont contain symsObj) {
symsGlobal.addAll(symsObj)
}else {
print sym conflict
abort
}
}
}
}
}
def symsGlobal
def symsAppCall
for (symsObj in symsObjs) {
for (sym in symsAppCall) {
if (symsGlobal dont found sym) {
if(symsObj found sym) {
if(symsGlobal dont contain symsObj) {
symsGlobal.addAll(symsObj)
}else {
print sym conflict
abort
}
}
}
}
}
备注:上面的算法并不一定完全准确,因为这些链接器的代码并不开源,只是通过例子推测出来,有问题欢迎指正
原文:https://www.cnblogs.com/feng9exe/p/14852562.html