移植gtk,这个配置有点早,可以了解一下他的工作流程

2023-05-16

最近一直GTK,感觉好晕、整整耗了我近三天才勉强在网络资料和他人帮助情况下完成。
所以记录一下,不然我记性太差,很可能下班之前就忘了!以后也好有个参考。
 
 
*****************************************************************************************************************
首先注意一个问题:GTK在编译的时候就要想好移植以后要放到怎样的路径里。
例如我打算放到终端的/opt/gtkdfb/下、那么在pc上交叉编译时就设置成这个目录来编译和安装,
因为如果编译和使用时的路径不一致的话pango建立不起来、打不开字库,至于有没有宏可以设置我就不知道了。
查源码太麻烦、所以既然早就知道、那么编译和应用用同样的目录是最好的。
 
*****************************************************************************************************************
设置编译时用的环境变量(我的是/opt/gtkdfb):
#cd/opt/gtkdfb
#vi setenv.sh
#!/bin/sh
export CC="/4.3.3/bin/arm-linux-gcc"
export CXX="/4.3.3/bin/arm-linux-g++"
export RANLIB="/4.3.3/bin/arm-linux-ranlib"
export AR="/4.3.3/bin/arm-linux-ar"
export LD="/4.3.3/bin/arm-linux-ld"
export STRIP="/4.3.3/arm-linux-strip"
 
export PREFIX=/opt/gtkdfb
export PATH=$PATH:$PREFIX/bin
export C_INCLUDE_PATH=$PREFIX/include
export LD_LIBRARY_PATH=$PREFIX/lib
export PKG_CONFIG_PATH=$LD_LIBRARY_PATH/pkgconfig
export LDFLAGS=-L$LD_LIBRARY_PATH
export CFLAGS=-I$PREFIX/include
#source ./setenv.sh
 
*****************************************************************************************************************
一、编译:
 
1、jpeg-6b
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux --enable-static --enable-shared --prefix=$PREFIX
make;make install
 
 
2、libpng-1.2.39
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux --enable-static --enable-shared --prefix=$PREFIX
make;make install
 
 
3、freetype-2.3.9
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux --enable-static --enable-shared --prefix=$PREFIX
make;make install
 
 
4、pixman-0.18.2
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX
make;make install
 
 
5、glib-2.24.0(先编译glib,enchant有glib的依赖)
export ARCH=arm
echo ac_cv_type_long_long=yes>>$ARCH-linux.cache
echo glib_cv_stack_grows=no>>$ARCH-linux.cache
echo glib_cv_uscore=no>>$ARCH-linux.cache
echo c_cv_func_posix_getpwuid_r=yes>>$ARCH-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>$ARCH-linux.cache
echo ac_cv_func_posix_getgrgid_r=yes>>$ARCH-linux.cache(这个是自己加的)
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux --enable-shared --prefix=$PREFIX --cache-file=$ARCH-linux.cache
make;make install
 
 
6、enchant-1.6.0
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX
make;make install
 
 
7、DirectFB-1.4.5
./configure -host=arm-linux --prefix=$PREFIX --with-gfxdrivers=none --enable-sdl=no  --disable-x11 "CFLAGS=-I$PREFIX/include" "LIBS=-L$PREFIX/lib -lz -ljpeg"
make;make install
 
 
8、Python2.5.1(这个是自己加的、因为我编译libxml库时发现需要python的依赖。Python也是移植起来最麻烦的,具体的你们自己看吧)
我没有尝试去掉python的依赖以后编译xml会不会对整个GTK移植后的运行有影响,
你如果想试试那么可以告诉我结果、多谢!
 
首先,看看你有没有sqlite的库,如果没有,那么恭喜你、因为你要再多移植一个sqlite了。好在sqlite的移植很简单、不用担心。
然后就是python的移植了,python不能直接移植、所以要有python的pc版对.py脚本进行支持,因为移植时有用到.py脚本。
具体的还是自己看原帖的资料吧。
 
资料网址:http://wiki.woodpecker.org.cn/moin/LeoJay/HOWTOCrossCompilePythonForARM
 
注:    1、记得现在编译用的shell的环境变量是咱们修改过的、所以要编译python的pc版就最后是另开以个shell。
    2、最好用网站上的setup.py。自己修改的总有一些诡异的问题。只要记得把 for d in [''] 这里的地址改成自己的就行。
 
 
9、libxml2-2.7.7
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX
make;make install
 
 
10、fontconfig-2.8.0
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX --with-freetype-config=$PREFIX/bin/freetype-config --enable-libxml2 --with-arch=arm
make;make install
 
 
11、icu4c-3_8_1
这个比较特殊,先编译一个pc版本,然后把bin目录重命名为bin-host,再交叉编译
./configure
make
到这里是会出错的,然后:
mv bin bin-host
mv lib lib-host
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX
这里记得先make clean一下、因为刚刚编译了pc的版本。
make;make install
cp config/icu-config /opt/gtkdfb/bin
 
 
12、cairo-1.8.10
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX --enable-directfb=yes --without-x --disable-xlib --disable-xlib-xrender --disable-win32 --enable-png
make;make install
 
 
13、pango-1.28.0
export CAIRO_CFLAGS="-fno-strict-aliasing -I$PREFIX/include/cairo -I$PREFIX/include/fontconfig -I$PREFIX/include -I$PREFIX/include/pixman-1 -I$PREFIX/include/freetype2 -I$PREFIX/include/libpng12"
export CAIRO_LIBS="-L$PREFIX/lib -lcairo"
export GLIB_CFLAGS="-I$PREFIX/include -I$PREFIX/include/glib-2.0 -I$PREFIX/lib/glib-2.0/include"
export GLIB_LIBS="-L$PREFIX/lib -lgobject-2.0 -lgmodule-2.0 -lglib-2.0"
export FONTCONFIG_CFLAGS="-I$PREFIX/include/fontconfig -I$PREFIX/include"
export FONTCONFIG_LIBS="-L$PREFIX/lib -lfontconfig"
export FREETYPE_CFLAGS="-I$PREFIX/include/freetype2 -I$PREFIX/include"
export FREETYPE_LIBS="-L$PREFIX/lib -lfreetype -lz"
export FREETYPE_CONFIG="${PREFIX}/bin/freetype-config"
export CAIRO_PREFIX=$PREFIX
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX --without-x
make;make install
 
 
14、libsoup-2.30.2
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX --without-gnome  --disable-ssl --without-apache-httpd
make;make install
 
 
15、atk-1.30.0
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX --disable-glibtest
make;make install
 
 
16、gtk+-2.16.0
echo gio_can_sniff=yes >arm-linux.cache
export LDFLAGS="-L$PREFIX/lib -Wl,-rpath,$PREFIX/lib"(防止configure时找不到pango)
export BASE_DEPENDENCIES_LIBS="-L$PREFIX/lib -lpangocairo-1.0 -lpango-1.0 -lcairo -ljpeg -lpng12 -lpangoft2-1.0"
./configure  --build=i686-pc-linux --host=arm-linux --target=arm-linux  --enable-shared --prefix=$PREFIX --with-gdktarget=directfb --without-libtiff --disable-glibtest --disable-largefile --with-included-loaders=jpeg,gif,png,xpm --without-libjasper --without-x --enable-debug=no --cache-file=arm-linux.cache --disable-cups
make;make install
 
 
*****************************************************************************************************************
二、错误:
 
1、jpeg-6b:
configure:
一上来就由问题,真的让人很郁闷。是configure时不能创建libtool的问题。看看自己的pc上是否有libtool。
没有就装、有就做这几步:
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
然后在configure就ok了。
 
make:
make时如果在VM与win共享的目录下编译可能会有错误:ln: creating hard link.....
只要将jpeg-6b移到vm中的linux内部make就可以了。
 
make install:
因为第一个编译、所以应该会有无路径的问题,创建就O了:
mkdir -p /opt/gtkdfb/include  /opt/gtkdfb/lib  /opt/gtkdfb/bin /opt/gtkdfb/man/man1
 
 
网上资料:
 
libtool是一个包,你看看有没有安装:
rpm -qa|grep libtool
 
看看是什么版本,如果是比较早的1.3版本,会用到ltconfig,可能会有兼容性问题。
 
以下转贴,可以参考一下:
 
在RHEL 4 64 位下编译jpeg-6b时候报以下错误:
 
 make: ./libtool: Command not found
 make: *** [jcapimin.lo] Error 127
 
错误分析:由于libtool版本过低导致的,重新下载新版本的libtool以默认方式安装,执行以下命令:
 
./configure
make
make install
 
然后进入jpeg-6b的源码目录,然后执行以下步骤,切记!
 
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
mkdir -p /usr/local/man/man1
make install
 
 
4、pixman-0.18.2:
这个比较气人,make的时候说找不到gtk的库。害我弄了N长时间、最后直接把gtk库的支持给去了、发现是一样能用,并不影响!
configure 时、加参数 --disable-gtk。
 
 
7、DirectFB-1.4.5:
make时、如果有arm-none-linux-ld: 08:31:这样类似的问题。
修改src/core/Makefile.am 和Makefile.in 两个文件中日期和时间之间的空格改成 - 之类的即可。
如:"+%Y-%m-%d %H:%M" 改成 "+%Y-%m-%d-%H:%M"
 
 
11、icu4c-3_8_1:
icu编译,请先下载icu-cross-compile.patch
在:http://blog.chinaunix.net/uid-20386199-id-1953166.html
在编译icu之前打上补丁(patch -p0<icu-cross-compile.patch)
 
 
13、pango-1.28.0:
pango编译出错,运行下面命令:
cd pango
perl -pi -e 's/\@ENUMPREFIX\@/PANGO/g' pango-enum-types.h(注意:这条命令不能在linux与win的共享目录使用)
cd ..
 
 
16、gtk+-2.16.0:
make时会有"%s %f"类似的错误,这个是不支持编译选项的问题,
这个时候只要修改gtk/Makefile 将 "evince --preview %f"等参数为 "epdfview"
 
可能会有.h文件不能识别宏定义的问题、一般是下面这四个头文件中的宏定义问题。修改就搞定:
perl -pi -e 's/\@ENUMPREFIX\@/GDK/g' gdk-pixbuf/gdk-pixbuf-enum-types.h
perl -pi -e 's/\@ENUMPREFIX\@/GDK/g' gdk/gdkenumtypes.h
perl -pi -e 's/\@ENUMPREFIX\@/GTK/g' gtk/gtktypebuiltins.h
perl -pi -e 's/\@ENUMPREFIX\@/GTK/g' perf/typebuiltins.h
 
*****************************************************************************************************************
三、应用:
 
因为在编译的时候就有找不到pango的问题所以得自己生成设置等等:
mkdir /opt/gtkdfb/etc/pango
/opt/gtkdfb/bin/pango-querymodules > /opt/gtkdfb/etc/pango/pango.modules
/opt/gtkdfb/bin/gdk-pixbuf-query-loaders > /opt/gtkdfb/etc/gtk-2.0/gdk-pixbuf.loaders
/opt/gtkdfb/bin/gtk-query-immodules-2.0 > /opt/gtkdfb/etc/gtk-2.0/gtk.immodules
 
注:字库可以用pc本机里面的,我用的是/usr/share/fonts/zh_CN/TrueType/zysong.ttf,
放到板子中的默认目录(/usr/share/fonts/zysong.ttf)即可。
 
 
一般来说,只要你的编译、安装时设置的路径和最终放到板子上的路径一致的话就不用设置环境变量,
不过如果有问题倒是可以试试设置一下:
export PREFIX=/opt/gtkdfb
export CFLAGS="-g -I$PREFIX/include"
export LDFLAGS=-L$PREFIX/lib
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export LIBXML2_CFLAGS=-I$PREFIX/include/libxml2
export LIBXML2_LIBS="-L$PREFIX/lib -lxml2"
export LDFLAGS="-L$PREFIX/lib -lts -Wl,-rpath,$PREFIX/lib"
export CPPFLAGS="-I$PREFIX/include"
export LD_LIBRARY_PATH=$PREFIX/lib
export DFBARGS=module-dir=$PREFIX/lib/directfb-1.4-5
export GTK_IM_MODULE="scim"  
*****************************************************************************************************************
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移植gtk,这个配置有点早,可以了解一下他的工作流程 的相关文章

随机推荐

  • linux 更新内核,安装内核树

    https www cnblogs com williamjie p 10723919 html
  • x86计算CPU频率示例

    include lt stdio h gt include lt stdlib h gt include lt assert h gt include lt stdint h gt include lt string h gt includ
  • SM2 签名预处理操作

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 转载 xff1a https www xuebuyuan com 1473900 html 一般情况下 xff0c 计算数字签名时应执行以
  • dataset中shuffle()、repeat()、batch()用法

    import numpy as np import tensorflow as tf np random seed 0 x 61 np random sample 11 2 make a dataset from a numpy array
  • Linux内核模块编程,多源码Makefile编写

    https mp csdn net console editor html 107838044 在学习内核模块编程的时候遇到了一些由于Makefile书写不正确导致的问题 一个 c源文件的Makefile按照网上的大部分资料介绍那样是没有问
  • 分组加密, 算法模式(ECB CBC CFB OFB)

    如果觉得写得不错 xff0c 烦请微信搜索公众号 34 郑州行疆户外 34 了解程序员的户外业余喜好 块加密 块加密 xff0c 英文Block Cyper xff0c 又称分组加密 xff0c 是一种常见的对称加密 xff0c 具有代表性
  • Linux UIO机制--用户空间I / O操作方法

    目录 前言 关于UIO UIO 的工作原理 前言 于许多类型的设备 xff0c 创建Linux内核驱动程序是过分的 真正需要的只是某种方式来处理中断并提供对设备存储空间的访问 控制设备的逻辑不必一定要在内核之内 xff0c 因为设备不需要利
  • Linux UIO驱动实例介绍

    接上一篇介绍UIO机制 https blog csdn net hpu11 article details 109395820 uio驱动详解 为了用最简单的例子说明问题 xff0c 我们在我们uio驱动的内核部分只映射了一块1024字节的
  • Mosquitto服务安装与使用---入门操作介绍

    关于Mosquitto配置的资料网上还是有几篇的 xff0c 但是看来看去 xff0c 基本上都是基于Linux 基于Window的凤毛麟角 xff0c 看上去貌似配置的东西相差不大 xff0c 实操过程中真的烦透了 xff0c 配置就是不
  • Windows 11 系统下载,正式版尚未发布

    下载链接方式 xff1a 关注 郑州行疆户外 程序员自己的订阅号 xff0c 回复 win11 xff0c 获取win11系统下载链接 一 发布 今年5月的Build大会 xff0c 微软便正式明确新一代操作系统为Windows 11 xf
  • Windows 11 系统下载安装 教程

    关 注 郑州行疆户外 订阅号 xff0c 回复 win11 xff0c 获取win11系统下载链接 xff0c 安装教程 说明 Windows11系统安装教程 xff0c 这里使用VM虚拟机演示具体安装教程 xff0c 如果是新手 xff0
  • Windows 11 TPM2.0问题及解决方法

    关注 郑州行疆户外 订阅号 回复 win11 xff0c 下载 windows11系统 回复 问题 xff0c 查看 windows11安装过程中遇到的问题及其解决方法 随着2021年6月24日 xff0c 微软正式发布会上确定windon
  • linux的dma驱动

    硬件平台 xff1a TI的3530 内核 xff1a linux 2 6 36 功能 xff1a 将fpga的数据从内存的一个地方复制到内存另一个地方 初学dma感到很是吃力 xff0c 编写的内核驱动代码仔细看了一个星期 xff0c 才
  • linux内核的并发与竞态

    并发与竞态是指多个任务单元同时访问同一个资源 xff0c 就会出现并发 xff0c 竞态的现象 其中多个任务单元包括中断 xff0c 进程 线程 xff0c 甚至多个多处理器 xff1b 同一资源既包含硬件资源 xff0c 也包括软件数据
  • UDP通信

    头文件 xff1a 1 pragma once 2 3 include lt stdio h gt 4 include lt unistd h gt 5 include lt string h gt 6 include lt stdlib
  • 交叉编译找不到stdio.h头文件,make menuconfig问题解决办法

    今天测试交叉编译器总出现问题 xff0c fatal error stdio h No such file or directory 后来根据指导使用编译命令 xff1a arm linux gcc src c I 头文件路径 能编译通过
  • 原子上下文,进程上下文,中断上下文的详细解析

    内核空间和用户空间是现代操作系统的两种工作模式 xff0c 内核模块运行在内核空间 xff0c 而用户态应用程序运行在用户空间 它们代表不同的级别 xff0c 而对系统资源具有不同的访问权限 内核模块运行在最高级别 xff08 内核态 xf
  • server,gtk,tslib

    一 首先先说下framebuffer xserver tslib gtk和桌面这五者之间的联系 xff0c 1 framebuffer 即linux系统的一块内存区域 xff0c 往这块区域写东西屏幕就会有所显示 对应的设备文件是dev f
  • 修改启动logo,禁止光标

    linux内核下使用的图片文件类型是pnm和PPm格式的 xff0c 所以在开始介绍修改linux内核启动LOGO之前 xff0c 1 先需要介绍一下怎么样设计自己开始logo的ppm图片 xff0c 首先选择一张png格式的图片 xff0
  • 移植gtk,这个配置有点早,可以了解一下他的工作流程

    最近一直GTK xff0c 感觉好晕 整整耗了我近三天才勉强在网络资料和他人帮助情况下完成 所以记录一下 xff0c 不然我记性太差 xff0c 很可能下班之前就忘了 xff01 以后也好有个参考 首先注意一个问题 xff1a GTK在编译