如何进行交叉编译
来源:互联网 发布:域名信息备案查询系统 编辑:程序博客网 时间: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
- 如何进行交叉编译
- 如何进行交叉编译
- 如何进行Qt应用程序的交叉编译?
- 如何交叉编译sqlite
- 使用clang进行交叉编译
- 如何安装交叉编译工具
- 如何交叉编译strace工具
- 如何交叉编译 移植 QT
- 如何搭建交叉编译环境
- 如何搭建交叉编译环境
- 使用GDB源码进行交叉编译
- 用kdevelop进行交叉编译的方法
- Mac下进行golang的交叉编译
- beego利用liteide进行交叉编译
- excel中两列如何进行交叉排列组合
- 如何交叉编译应用程序,技巧,注意事项
- 如何建立交叉编译工具链
- 如何建立交叉编译工具链
- 线段树模板(NOTONLYSUCCESS神牛)
- IntelliJ IDEA 13操作-- 3.项目集成spring、springMVC、hibernate等框架
- 泛型
- UVA471- Magic Numbers
- 8.9CH NOIP模拟
- 如何进行交叉编译
- WIN7系统中设置Mercurial的访问方式
- hibernate 延迟加载
- uva 146(下一个排列)
- HDU 1251 统计难题
- ArrayList源码分析
- 【Google2013年校园招聘笔试题】分析
- contesthunter NOIP模拟赛Day1 8.9
- 【Z++】【专为写数据生成器的z++语言问世了!!】