編譯後文件沖突
Ⅰ Android 集成三方SDK編譯時classes.jar文件沖突
這幾天的任務是將mapbox的工程合到程序中去,但是合並過程卻出現了問題
合並方法:在app的build.gradle中添加
dependencies {
compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:0.7.4@aar'){
transitive=true
}
}
但是合並後會報錯:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
這個錯誤是由於jar包沖突,解決方法如下:
方法一:找到沖突包,將沖突包刪除,一般沖突包為'com.android.support:appcompat-v7:22.2.0'或者'com.android.support:support-v4:22.2.0',但是我刪除沖突包後,依然報錯,於是使用方法二
方法二:因為我的沖突包是'com.android.support:support-v4:22.2.0',所以找到項目根目錄-build-intermediates-dex-cache-cache.xml文件,將其中跟v4有關的全部刪除,然後clean project,然後將compile改為provided如下:
dependencies {
compile 'com.vividsolutions:jts:1.13'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.jakewharton:disklrucache:2.0.2'
provided 'com.android.support:support-v4:21.0.0'
}
Ⅱ 關於VC++6.0編譯靜態庫再次調用的時候符號沖突
把你的靜態庫函數名個性化一點。
Ⅲ iOS-集成多個SDK內部文件重復沖突解決
最近使用Hbuilder集成一個項目,集成了很多sdk,發現有兩個sdk都是用了Masonry第三方庫布局,然後編譯報錯,關鍵字: plicate symbol ,出現這個就表示有重復文件了,我們需要把其中的一個sdk文件中生成的重復的.o文件一一刪除即可,如下則為相關位置,我將把Masonry.framework的相關重復文件一一移除合並解決沖突問題。
步驟如下:
1.打開終端cd到所要修改的sdk所載文件目錄(最好備份一個出來,改完再替換)
2.查看靜態庫文件包含的架構:
命令: lipo -info xxxx.a
主要看看總共有哪些架構有沖突,後面需要一一從相關架構移除。如下
根據結果可以看出包含armv7 i386 x86_64 arm64 這幾個庫,沖突文件必須從必須從每個架構的庫裡面相應刪除才行,其中x86_64為模擬器的架構,如果不需要模擬器調試,嫌麻煩x86_64可以不管。具體指令集相關可以看這篇文章: https://www.jianshu.com/p/5d1ce5d3d8d6
3.分離出相應架構的庫:
命令: lipo -thin armv7 XYRiskAssessment-iOS-1.0.0.a -output armv7.a
例:lipo -thin armv7 Masonry -output Masonry-armv7
然後我們就可以看到我們的sdk目錄下會多一個Masonry-armv7的庫,如下:
同樣的方法我們可以分離出i386 x86_64 arm64 文件分離完成後如下:
4.查看庫中所包含的文件列表
命令為: ar -t xxx.a
例: ar -t Masonry-armv7
5.如果不清楚兩個sdk都有哪些文件重復,可以按照以上步驟,查看下另一個重復的sdk都包含哪些文件,如下所示和Masonry.framework重復的DCUniVideoPublic.framework分離出armv7架構的文件列表,其實也可以在xcode編譯重復信息裡面找到相關.o文件,看個人喜好。
6.接著我們就要從每個架構文件中,刪除相關的沖突.o文件
命令::ar -d -sv XXXXX-armv7.a XXXX.o
例:
ar -d -sv Masonry-armv7 MASCompositeConstraint.o
ar -d -sv Masonry-armv7 MASViewConstraint.o
7.最後一步:把armv7 i386 x86_64 arm64 所有架構的重復文件按照上面方法刪除完成後。我們要把這幾個架構合並到原來的庫裡面
和並靜態庫的命令:
lipo -create XXXXX-armv7.a XXXXX-armv7s.a (加上所有架構的編譯庫) -output XXXXX-NOFfmpeg.a
例:
lipo -create Masonry-x86_64 Masonry-armv7 Masonry-i386 Masonry-arm64 -output Masonry
最後將這個新生成的靜態庫文件替換掉之前的,發現沖突解決。
注意:當把Masonry相關沖突.o文件移除後,這個移除合並後的兼容版本是不能單獨拿去使用的,單獨使用以上移除的.o文件會出現丟失的編譯錯誤,因為你已經移除了。
覺得有幫助留個贊再走唄 ~
Ⅳ vs2010 如何編譯多個cpp文件,在一個工程裡面多建幾個cpp文件,調試的時候提示main函數 沖突
Visual Studio裡面C++項目里只能有一個CPP文件有main函數,有多個當然會沖突。需要把其他的變成注釋,只留下你要運行的那個。