2011-08-25 51 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=""