您的位置:首页 > 运维架构 > Linux

Linux configure关于交叉编译的参数设置 (转)+补充一下关于 pkg-config 在交叉编译中的使用(转) + 动态.so库的环境设置, 使用 ld.so.conf(转)

2008-12-20 20:13 549 查看
原文http://blog.csdn.net/stevenliyong/archive/2008/12/10/3488538.aspx

configure的参数众多,一般包括如下
  --srcdir=DIR

  这个选项对安装没有作用.他会告诉'configure'源码的位置.一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下.

  --program-prefix=PREFIX

  指定将被加到所安装程序的名字上的前缀.例如,使用'--program-prefix=g'来configure一个名为'tar'
的程序将会使安装的程序被命名为'gtar'.当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in'文件使用时才会工作.
  --program-suffix=SUFFIX

  指定将被加到所安装程序的名字上的后缀.

  --program-transform-name=PROGRAM

  这里的PROGRAM是一个sed脚本.当一个程序被安装时,他的名字将经过`sed -e PROGRAM'来产生安装的名字.

  --build=BUILD

  指定软件包安装的系统平台.如果没有指定,默认值将是'--host'选项的值.

  --host=HOST

  指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.

  --target=GARGET

  指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用'--host'选项的值.

  --disable-FEATURE

  一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置.如果默认是提供这些特性,可以使用'--disable-FEATURE'来禁用它,这里'FEATURE'是特性的名字.例如:

  $ ./configure --disable-gui

  -enable-FEATURE[=ARG]

  相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它.这里'FEATURE'是特性的名字.一个特性可能会接受一个可选的参数.例如:

  $ ./configure --enable-buffers=128

  `--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的.

  --with-PACKAGE[=ARG]

  在自由软件社区里,有使用已有软件包和库的优秀传统.当用'configure'来配置一个源码树时,可以提供其他已经安装的软件包的
信息.例如,
倚赖于Tcl和Tk的BLT器件工具包.要配置BLT,可能需要给'configure'提供一些关于我们把Tcl和Tk装的何处的信息:
  $ ./configure --with-tcl=/usr/local --with-tk=/usr/local

  '--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的.

  --without-PACKAGE

  有时候你可能不想让你的软件包与系统已有的软件包交互.例如,你可能不想让你的新编译器使用GNU ld.通过使用这个选项可以做到这一点:

  $ ./configure --without-gnu-ld

  --x-includes=DIR

  这个选项是'--with-PACKAGE'选项的一个特例.在Autoconf最初被开发出来时,流行使用'configure'来
作为
Imake的一个变通方法来制作运行于X的软件.'--x-includes'选项提供了向'configure'脚本指明包含X11头文件的目录的方
法.
  --x-libraries=DIR

  类似的,'--x-libraries'选项提供了向'configure'脚本指明包含X11库的目录的方法.

  ==========================

  红色高亮这一个参数是我们交叉编译应用的重点

  configure --host=arm-Linux 这就是arm的交叉编译选项

  configure --host=mipsel-linux 这个就是mipsel的交叉编译选项

  ============================

  下面转一篇对我有帮助的博客

  在交叉编译的时候总是使用configure --host=arm-linux 嘿嘿
但是在CONFIGURE中有很多的测试程序是不可以在HOST上运行的就会出现: error: cannot run test program
while cross compiling
  类似的错误,可以使用CACHEFILE解决这个问题,还要谢谢ABSURD兄的文章给我的指导。

  我是这样解决的第一步:记录下错误的地方如:checking abstract socket namespace... configure: error: cannot run test program while cross compiling

  注意到abstract socket namespace在configure中查找abstract socket可以看到类似这样的结构

  echo "$as_me:$LINENO: checking abstract socket namespace" >&5

  echo $ECHO_N "checking abstract socket namespace... $ECHO_C" >&6

  if test "${ac_cv_have_abstract_sockets+set}" = set; then

  echo $ECHO_N "(cached) $ECHO_C" >&6

  其中ac_cv_have_abstract_sockets是我们要查找的变量

  使用echo ac_cv_have_abstract_sockets=yes>arm-linux.cache

  然后

  ./configure --host=arm-linux --cache-file=arm-linux.cache

  K这样就搞定了

  另外:

  1:fedora 中 /sbin/init 3 关闭图形界面

  有些 configure 依赖lib 编译,并且需要pkg-config 支持,可能

  需要设定 PKG_CONFIG_PATH 环境变量, 此变量指向所依赖lib 的xxx.pc

  描述文件, xxx.pc描叙lib 的特性,如

  prefix=/develop/upnp/mips_libupnp

  exec_prefix=${prefix}

  libdir=${exec_prefix}/lib

  includedir=/develop/upnp/mips_libupnp/include

  Name: libupnp

  Description: Linux SDK for UPnP Devices

  Version: 1.6.3

  ibs: -L${libdir} -lupnp -lthreadutil -liXML

  Cflags: -pthread -I${includedir}/upnp

  2:configure 脚本判断lib 是否存在时是采用编译C 文件的方法,所以有时候交叉编译时

  可通过修改 configure文件通过测试,具体是添加 -I 或者-L 指明位置。

  有些通过 --host 指定目标平台,--host=mipsel-linux (libupnp)

  有些通过 --cross-prefix=mipsel-linux- --cross-compile(ushare) 指定,

  具体可通过configure --help/-h 查看

==============================================
原文http://blog.csdn.net/stevenliyong/archive/2008/12/11/3497421.aspx

这是pkgconfig 官方, 给出的使用pkg-config 配置交叉编译环境的方法.

http://pkgconfig.freedesktop.org/wiki/CrossCompileProposal

1.

现阶段还不能直接通过 --host 参数控制交叉编译过程中链接的package路径.

只能通过$PKG_CONFIG_PATH 或 $PKG_CONFIG_LIBDIR.

1.1

Note that when specifying PKG_CONFIG_LIBDIR, pkg-config will
completely ignore the content in PKG_CONFIG_PATH, even if the
documentation states different things.

我的做法是在交叉编译的时候使用

export PKG_CONFIG_LIBDIR=/nfsroot/arm-xscale-linux-gnu/steven_root/pkgconfig

1.2.

In a cross compile situation, some .pc
files on the system will be for the build machine and some will be for
the target machine. In order to make sure that the build machine's .pc files are not found, both the $PKG_CONFIG_PATH and $PKG_CONFIG_PATH environment variables must be set to directories containing only target machine `.pc files.

2.
pkgconfig 官方给出将来可能采用的一种方法就是通过auto-config 的参数 --host 来自动判断用户交叉编译环境.
In order for pkg-config to be smart about picking what .pc files to use, it needs to know the what it is targetting. The proposed solution to this is to add a --host option to the program
关注pkgconfig 此功能的实现.

That's all!
Steven.===================================
原文http://blog.csdn.net/stevenliyong/archive/2008/12/11/3497544.aspx

动态库文件的搜索路径除了通过 LD_LIBRARY_PATH 来指明,

还可以在 /etc/ld.so.conf 文件中添加库的搜索路径。

将自己可能存放库文件的路径都加入到/etc/ld.so.conf 。如:
/usr/local/lib
/opt/navu/lib
/opt/GPL/lib
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: