标题:如何进行交叉编译 作者: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.3 export ROOTFS_DIR=/home/lijun/root_nfs export 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/pkgconfig export 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.cache echo "ac_cv_func_malloc_0_nonnull=yes" >>arm-linux.cache CC=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 2590 scim_pinyin_smart_match.cpp:727 scim_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_STDIO make make install
如何进行交叉编译
最新推荐文章于 2024-03-05 20:41:13 发布