我爲Android使用libjpeg-turbo端口。這不是從基JPEG-渦輪很大不同以源代碼術語:http://git.linaro.org/gitweb?p=people/tomgall/libjpeg-turbo/libjpeg-turbo.git;a=shortlog;h=refs/heads/androidAndroid的libjpeg-turbo:如何組織運行時選擇NEON/non-NEON代碼?
有由2個CPU特性依賴文件的模塊(靜態庫):jsimd_arm_neon.S和jsimd_arm.c。我想用NEON支持編譯jpeg-turbo,我必須定義__ARM_HAVE_NEON
並編譯這個模塊爲-march=armv7-a -mfpu=neon
。我希望庫在沒有霓虹支持(如Tegra 2)的較舊硬件上運行,我應該刪除霓虹燈編譯器標誌,並且不要剔除__ARM_HAVE_NEON
。
我的問題是:如何編譯它,以便在運行時可以選擇霓虹燈或非霓虹燈路徑,而無需在非霓虹燈硬件上使用SIGILL
?我知道如何在運行時檢查NEON,但我不知道如何修改libjpeg-turbo並組織庫。
構建相同庫的兩個不同版本,然後在運行時加載正確的版本。 – auselen
@auselen:這是一個明顯的解決方案,但我想避免動態加載庫(或將它構建到.so,對於這一點,但這不是什麼大不了的)。 –
我只是溝渠沒有霓虹燈的設備:ARMv6太老了。即使有人仍在使用搭載ARMv6的Android手機,他幾乎不會下載任何內容。 Tegra2並不是那麼古老,但太小了,放棄它會傷害那麼多。 –