Linux configure關於交叉編譯的參數設置 (轉)+補充一下關於 pkg-config 在交叉編譯中的使用(轉) + 動態.so庫的環境設置, 使用 ld.so.conf(轉)

原文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



發佈了45 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章