2016-10-10 27 views
5

我正在嘗試爲ARM重新編譯適當大小的軟件堆棧(doubango)。兩週後,我想我終於完成了,因爲文本重定位的庫不再具有armeabi,armv5te,armv7-a。然而,armv7-a-neon還有他們...儘管-fPIC文本重定位?

我知道,鏈接到的靜態庫或包含文本重定位會在我的圖書館介紹他們的好,打一個人應該在他的CFLAGS使用-fPIC而重新編譯所有的共享庫構建獨立於位置的代碼。所有這一切,我建立了FFMPEG沒有文本重定位以及...

我不明白的是這樣的:如果我使用相同的源文件的所有拱組,並手動檢查不管.a文件是否具有文本重定位,爲什麼ARMv7 NEON只出現單個文本重定位?

我使用readelf像這樣readelf -a <libame.a> | grep TEXTREL兩個.a.so庫檢查。

[email protected]:~/SCRATCH/doubango_env/doubango/android-projects/output/gpl/armv7-a-neon/lib$ readelf -a libtinyWRAP.so | grep TEXTREL 
    0x00000016 (TEXTREL)     0x0 
    0x0000001e (FLAGS)      SYMBOLIC TEXTREL BIND_NOW 

如何發現運作引入文本重我armv7neon .so庫的罪魁禍首?

我正在使用NDK r12b。下面是整個構建輸出的一個pastebin:OK,沒有pastie或pastebin,因爲它們不允許2.1mb的文本。

太好了。那麼,爲什麼文本重定位只出現在NEON上?

這個問題可能是simialr,除了我沒有x86的重定位。 Why is NDK generating shared library for x86 with text relocation even after setting -fPIC flag?

回答

5

如果一切正在建立與-fPIC,其餘文本重定位一般在任何手寫彙編。

它看起來像ffmpeg的是已知有一些文字搬遷問題與它的彙編代碼:

+0

是啊,我重修的ffmpeg用' - 禁用asm'標誌和RES ulting庫本身沒有文本重定位(因爲彙編器部分不包括在內)。 ARM庫本身沒有文本重定位,這意味着我清理了它們;只有NEON庫有1個文本重定位,這就是爲什麼我難倒了。 – Shark

+0

我在doubango的github上打開了一個問題,但我並不期待/希望得到答覆。 https://github.com/DoubangoTelecom/doubango/issues/486 – Shark

+0

好的,我已經清除了文本重定位的FFMPEG,但霓虹燈構建仍然有一個... – Shark