2011-08-25 70 views
3

如何編譯i386體系結構的x264庫?通常強制一個架構,我會使用下面的命令:爲i386編譯x264

./configure CC="gcc -arch i386" CXX="g++ -arch i386" 

但它似乎不適用於x264。

要編譯x264我配置它並生成它,這會生成一個x86_64庫。當我嘗試使用上述命令強制i386架構我收到以下消息:

未知的選項CC = GCC -arch I386,忽略未知的選項CXX =克++ -arch I386,忽略

然後,配置腳本輸出爲X86_64平臺配置的配置腳本。我想看看它爲i386平臺配置並生成一個i386二進制文件。

+4

定義「它似乎不工作」。 –

+0

你預計會發生什麼?你看到了什麼呢? –

+1

要編譯x264我配置它並生成它,這會生成一個x86_64庫。當我嘗試使用上述命令強制i386體系結構時,我收到以下消息: 未知選項CC = gcc -arch i386,忽略 未知選項CXX = g ++ -arch i386,忽略 然後,configure腳本會打印出它是爲X86_64平臺配置。我想看看它爲i386平臺配置並生成一個i386二進制文件。 – user293895

回答

5

Autotooled configure腳本具有特殊的命令行參數--build--host,它們用於配置交叉編譯。一些舊的配置腳本試圖通過檢查編譯器的輸出來發現它們是交叉編譯的,但是明確告訴配置腳本更加健壯和更健壯。例如,

參見here。或者this question

(呵呵,和直接原因,你所看到的「未知選項」錯誤是環境變量覆蓋去之前sh命令行腳本的名稱,以後不會了。這不是make,其中變量定義可以在make命令行上給出)

+0

配置已採取選擇這種方式很長一段時間了。 –

+0

哦。那麼,顯然OP的使用不是。 (我從他引用的錯誤信息的措辭推斷它的行爲)。 –

+0

是的,你說得對。不是所有的配置腳本都是autoconf。 –

2

如果你有一個x86-64 gcc,你可以提供「-m32」來要求它編譯一個32位二進制文​​件。所以,你應該能夠使用配置是這樣的:但是

./configure CFLAGS="-m32" 

如果不工作,它可能是在autotooling的錯誤和CFLAGS被覆蓋掉了。另一種可以嘗試:

make CFLAGS="-m32" 

後者的問題是,你必須記住要做到這一點,否則你會用不同的架構建立了一些目標文件鏈接問題而告終。

+0

您可能還需要LDFLAGS =「 - m32」才能正確完成鏈接。 –

4

看完後配置腳本和config.sub文件,我發現下面爲建設libx264的i386的版本工作:

./configure --host=i386-apple-darwin 

我也遇到過,「沒有w ^請求C編譯器找到「錯誤一點。我已經將LDFLAGS環境變量設置爲錯誤。因此,在繼續之前,確保LDFLAGS和CFLAGS是空的(或良好的)。

export CFLAGS="" 
export LDFLAGS=""