如何进行交叉编译

来源:互联网 发布:域名信息备案查询系统 编辑:程序博客网 时间:2024/05/18 08:02
标题:如何进行交叉编译作者:kagula日期:2008-3-21环境:     [1]arm-linux-gcc-3.4.1.tar.bz2包     [2]Ubuntu7.10Desktop阅读前提:    [1]有交叉编译的概念    [2]有pc文件概念概要: 在宿主机上,编译目标机(ARM)上的软件包正文:   分四部份:第一部份:配置环境变量PATH              我是用gedit ~/.bashrc     文件尾部,增加              PATH=$PATH:/usr/local/arm/3.4.1/bin第二部份:配置其它环境变量      它的作用,是使待编译包,找得到头文件,和库文件export COMPILE_ROOT=/usr/local/arm/3.4.1  #编译根export CFLAGS="-I$COMPILE_ROOT/arm-linux/include -I$COMPILE_ROOT/include/c++/3.4.1 -I/home/lijun/scim-1.2.3/src"  #头文件search位置export LDFLAGS="-L$COMPILE_ROOT/arm-linux/lib  -L$COMPILE_ROOT/lib -L$COMPILE_ROOT/lib/gcc/arm-linux/3.4.1 -L/home/lijun/scim-1.2.3/lib -L/home/lijun/root_nfs/usr/lib -L/home/lijun/root_nfs/lib"  #库文件search位置export PKG_CONFIG_PATH=/home/lijun/scim-1.2.3  #指定pc文件路径;pc文件,包含了某个依赖项,头文件和库文件搜索路径。第三部份:调用configure生成Makefile文件      下面是configure的例子CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/kagula  --disable-skim-support CFLGS="$CFLAGS" LDFLAGS="$LDFLAGS"       其中--preifx  指定目标位置(软件包的安装位置)         -disable-skim-support是scim-pinyin包,configure的特殊选项       你可以通过./configure --help查看,configure能够接受的参数第四部份:Make,没有找到哪个文件,就修改CFLAGS和LDFLAGS参数,使得指向没有找到的文件(可能是H文件,也可能是某个so文件)       直到make成功!             这时,会在当前目录的/src/.libs下生成目标so文件(库文件),make install后,就会把编译好的文件,安装到目标位置。             注意:在目标安装位置下会自动建立include、lib、 share文件夹。备注:[1]在宿主机上你可以使用下面的命令,查看,某个可执行文件,它的依赖项arm-linux-readelf -a 可执行程序文件名|grep "Shared library"(对本地可执行文件可以使用ldd命令,查看它的依赖项)在开发板上你可以用下面的命令,查看可执行文件的依赖项/lib/ld-linux.so.2 --list 可执行程序文件名(这相当于ldd 可执行程序文件名)参考资料:[1]交叉编译时候如何设置连接库的搜索路径http://blog.chinaunix.net/u1/46715/showart_447639.html[2]ld.so.conf 文件与PKG_CONFIG_PATH变量http://hi.baidu.com/dexinmeng/blog/item/5512cf018b8941d5277fb571.html[3]部份源码包下载位置http://www.paldo.org/index.php?section=packages&page=main&releaseid=100040附:ARM-2.95.3编译scim-pinyin-0.5.91包的例子#COMPILE_ROOT编译器位置#ROOTFS_DIR依赖包位置#/home/kagula是目标安装位置,也包括部份依赖包export COMPILE_ROOT=/usr/local/arm/2.95.3export ROOTFS_DIR=/home/lijun/root_nfsexport CFLAGS="-I$COMPILE_ROOT/include -I$COMPILE_ROOT/arm-linux/include -I$ROOTFS_DIR/usr/X11R6/include -I/home/kagula/include"export LDFLAGS="-L$COMPILE_ROOT/arm-linux/lib -L$COMPILE_ROOT/lib   -L$ROOTFS_DIR/usr/X11R6/lib/  -L/home/kagula/lib -L$ROOTFS_DIR/usr/lib"export PKG_CONFIG_PATH=/home/kagula/lib/pkgconfig:$ROOTFS_DIR/usr/lib/pkgconfigexport HAVE_X=" --x-includes=$ROOTFS_DIR/usr/X11R6/include --x-libraries=$ROOTFS_DIR/usr/X11R6/lib --with-x  "export GTK2_CFLAGS="-I/home/kagula/include -I$ROOTFS_DIR/usr/include/gtk-2.0 -I$ROOTFS_DIR/lib/gtk-2.0/include -I$ROOTFS_DIR/usr/include/atk-1.0 -I$ROOTFS_DIR/usr/include/cairo -I$ROOTFS_DIR/usr/include/pango-1.0 -I$ROOTFS_DIR/usr/include/glib-2.0 -I$ROOTFS_DIR/usr/lib/glib-2.0/include -I$ROOTFS_DIR/usr/include/freetype2 -I$ROOTFS_DIR/usr/include/libpng12 -I$ROOTFS_DIR/usr/lib/gtk-2.0/include  -I$ROOTFS_DIR/usr/X11R6/include"export GTK2_LIBS="-L/home/kagula/lib   -L/home/kagula/root_nfs/lib  -L$ROOTFS_DIR/usr/lib  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lcairo -lX11 -lXfixes -lpango-1.0 -lgdk_pixbuf-2.0 -lm -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0"export GTHREAD2_CFLAGS="-pthread -I$ROOTFS_DIR/usr/include/glib-2.0 -I$ROOTFS_DIR/usr/lib/glib-2.0/include"export GTHREAD2_LIBS="-pthread -lgthread-2.0 -lrt -lglib-2.0"echo ac_cv_file__usr_share_sgml_docbook_xsl_stylesheets_html_tldp_html_xsl=yes >arm-linux.cacheecho "ac_cv_func_malloc_0_nonnull=yes" >>arm-linux.cacheCC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/kagula   --disable-skim-support  CFLGS="$CFLAGS" LDFLAGS="$LDFLAGS"  $HAVE_X --with-x --cache-file=arm-linux.cache  --with-gnu-ld --with-gtk-im-module-dir=$ROOTFS_DIR/usr/lib/gtk-2.0/immodules在下面位置修改源代码,比如text.clear();  改为text.erase(0,text.size());scim_pinyin_imengine.cpp:2359 2471 2479 2589 2590scim_pinyin_smart_match.cpp:727scim_special_table.cpp: In method `class scim::WideString SpecialTable::get_date(int) const':scim_special_table.cpp:336: implicit declaration of function `int snprintf(...)'make[2]: *** [libpinyin_la-scim_special_table.lo] 错误 1开头的地方加上一句:#define Uses_C_STDIOmake make install
0 0