来自:http://tauruspdj.blog.163.com/blog/static/4312500620080279183197/
1)编译nano-X(即microwindows-0.91)
2)编译nxlib0.45
3)编译fltk-1.1.7
安装目录是/usr/local/arm/2.95.3
准备工作:解压交叉编译cross2.95.3到/usr/local/arm并添加路径
exportPATH=/usr/local/arm/2.95.3/bin:$PATH
1 编译安装nano-X
主要是修改config文件,
将./src/cinfigs中的 config.fb覆盖掉./src下的config
再进行适当修改
####################################################################
#Microwindows and Nano-X configuration file
#
# This package canbe configured to run on Linux (MIPS, ARM, POWERPC or x86)
# UNIX,ELKS, DJGPP, or RTEMS.
# On Linux, we've got drivers for Linux 2.xframebuffers, X11, or,
# svgalib for VGA hardware.
# Inaddition, a gpm or direct serial mouse driver can be configured.
#On ELKS, the bios screen driver and serial mouse driver are alwaysused.
#
# Either Microwindows and/or Nano-X can be built.
#Microwindows and Nano-X have several demos.
#
# For MSDOSmakes, see mcmwin.mak andmcnanox.mak
####################################################################
####################################################################
#
#build target platform
#
# Valid ARCH values are:
#
#LINUX-NATIVE
# LINUX-TCC
# LINUX-ARM
# LINUX-MIPS
#LINUX-POWERPC (BIGENDIAN=Y)
# LINUX-SPARC (BIGENDIAN=Y)
#LINUX-SH
# FREEBSD-X86
# SOLARIS (BIGENDIAN=Y)
# TRIMEDIA
#RTEMS
# DJGPP
# ELKS
#
# note: ELKS can't buildclient/server nano-X, nor widgetlib
#
####################################################################
ARCH = LINUX-ARM #LINUX-NATIVE
BIGENDIAN = N
NATIVETOOLSPREFIX =
ARMTOOLSPREFIX = arm-linux-
MIPSTOOLSPREFIX = mipsel-linux-
POWERPCTOOLSPREFIX = powerpc-linux-
SHTOOLSPREFIX = sh-linux-gnu
RTEMSTOOLSPREFIX = i386-rtemself-
####################################################################
#
#Compilingoptions
#
####################################################################
OPTIMIZE = Y
DEBUG = N
VERBOSE = N
THREADSAFE = Y #N
####################################################################
#
#Libraries to build: microwin, nano-X, nanowidget, objectframeworks
#
####################################################################
MICROWIN = Y
NANOX = Y
SHAREDLIBS = N
OBJFRAMEWORK = N
####################################################################
#
#Demos tobuild
#
####################################################################
MICROWINDEMO = Y
NANOXDEMO = Y
####################################################################
#
#Applications tobuild
#
####################################################################
NANOWM = Y
####################################################################
#
#The pixeltype of the native hardware or underlying graphicslibrary.
# This definition defines the PIXELVAL to be 32, 16 or 8bits wide.
# If using Linux framebuffer, set toMWPF_TRUECOLOR0888, and use fbset.
# It also enables GdArea/GrAreafor this particular pixel packing format.
#
# defineMWPF_PALETTE /* pixel is packed 8bits 1, 4 or 8 pal index*/
# define MWPF_TRUECOLOR8888 /* pixel ispacked 32 bits 8/8/8/8 truecolor w/alpha*/
# defineMWPF_TRUECOLOR0888 /* pixel is packed 32 bits 8/8/8 truecolor*/
#define MWPF_TRUECOLOR888 /* pixel is packed 24 bits 8/8/8truecolor*/
# define MWPF_TRUECOLOR565 /* pixel is packed 16bits 5/6/5 truecolor*/
# define MWPF_TRUECOLOR555 /* pixelis packed 16 bits 5/5/5 truecolor*/
# define MWPF_TRUECOLOR332 /* pixel is packed 8 bits 3/3/2truecolor*/
#
####################################################################
SCREEN_PIXTYPE = MWPF_TRUECOLOR565 #MWPF_TRUECOLOR0888
####################################################################
#
#NanoX: Put Y to the following line to link the nano-X application
#with the server. This is required for ELKS, if no network ispresent,
# or for speed or debugging. This affects thenano-X serveronly.
#
####################################################################
LINK_APP_INTO_SERVER = N
####################################################################
#Shared memory support for Nano-X client/server protocolspeedup
####################################################################
HAVE_SHAREDMEM_SUPPORT = N
####################################################################
#
#File I/O support
# Supporting either below drags in libc stdio,which may not bewanted
#
####################################################################
HAVE_FILEIO = Y
####################################################################
#BMP, GIF readingsupport
####################################################################
HAVE_BMP_SUPPORT = Y
HAVE_GIF_SUPPORT = Y
HAVE_PNM_SUPPORT = Y
HAVE_XPM_SUPPORT = Y
####################################################################
#JPEG support through libjpeg, see README.txt incontrib/jpeg
####################################################################
HAVE_JPEG_SUPPORT = N
INCJPEG = .
LIBJPEG = /usr/lib/libjpeg.a
####################################################################
#PNG support via libpng andlibz
####################################################################
HAVE_PNG_SUPPORT = N
INCPNG = .
LIBPNG = /usr/lib/libpng.a
LIBZ = /usr/lib/libz.a
####################################################################
#TIFF support throughlibtiff
####################################################################
HAVE_TIFF_SUPPORT = N
INCTIFF = .
LIBTIFF = /usr/lib/libtiff.a
####################################################################
#native .fnt loadable fontsupport
####################################################################
HAVE_FNT_SUPPORT = Y
HAVE_FNTGZ_SUPPORT = N #Y
FNT_FONT_DIR = "fonts/bdf"
####################################################################
#T1 adobe type1 font support thrut1lib
####################################################################
HAVE_T1LIB_SUPPORT = N
INCT1LIB = .
LIBT1LIB = /usr/local/lib/libt1.a
####################################################################
#TrueType font support thru FreeType1.x
####################################################################
HAVE_FREETYPE_SUPPORT = Y #N
INCFTLIB = /usr/local/include #/usr/include/freetype1
LIBFTLIB = /usr/local/lib/libttf.a #/usr/lib/libttf.so
FREETYPE_FONT_DIR = "fonts/truetype"
####################################################################
#Support for many kinds of font thru FreeType 2.x
# Must also setFREETYPE_FONT_DIR in the Freetype 1.xsection
####################################################################
HAVE_FREETYPE_2_SUPPORT = N
INCFT2LIB = .
LIBFT2LIB = /usr/lib/libfreetype.a
####################################################################
#PCF font support
# Selecting HAVE_PCFGZ_SUPPORT will allow you todirectly read
# .pcf.gz files, but it will add libz to the size oftheserver
####################################################################
HAVE_PCF_SUPPORT = N
HAVE_PCFGZ_SUPPORT =N
PCF_FONT_DIR = "fonts/pcf"
####################################################################
#Chinese Han Zi Ku loadable fontsupport
####################################################################
HAVE_HZK_SUPPORT = N
HZK_FONT_DIR = "fonts/chinese"
####################################################################
#Chinese BIG5 compiled in font support(big5font.c)
####################################################################
HAVE_BIG5_SUPPORT = Y #
####################################################################
#Chinese GB2312 compiled in font support(gb2312font.c)
####################################################################
HAVE_GB2312_SUPPORT = Y #
####################################################################
#Japanese JISX0213 compiled in font support(jisx0213-12x12.c)
####################################################################
HAVE_JISX0213_SUPPORT = N
####################################################################
#Korean HANGUL font support(jo16x16.c)
####################################################################
HAVE_KSC5601_SUPPORT = N
####################################################################
#Japanese EUC-JP support using loadable MGLfont
####################################################################
HAVE_EUCJP_SUPPORT = N
EUCJP_FONT_DIR = "fonts/japanese"
####################################################################
#Generate screen driver interface only with no fonts orclipping
####################################################################
NOFONTSORCLIPPING = N
####################################################################
#
#Window move algorithms for Microwindows
# Change for tradeoffbetween cpu speed and looks
# ERASEMOVE repaints only backgroundswhile window dragging, quicker.
# Otherwise an XOR redraw is usedfor window moves only after button up,
# quickest (should set forELKS)
# UPDATEREGIONS paints in update clipping region only forbetter look andfeel
#
####################################################################
ERASEMOVE = Y
UPDATEREGIONS = Y
####################################################################
#
#Link with Gray Palette (valid only for 4bppmodes)
#
####################################################################
GRAYPALETTE = N
####################################################################
#
#If the platform is running UNIX, Linux orRTEMS...
#
####################################################################
ifneq($(ARCH), ELKS)
# X Window screen, mouse andkbd drivers
X11 = N
ifeq ($(X11), Y)
#startup screen width, height, (depth for palette modeonly)
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
SCREEN_DEPTH = 4
# You may want to turn thison for XFree86 4.x or if your backing store
# isn't functioningproperly
USE_EXPOSURE = Y
else
# framebuffer screen driver(linear and/or vga 4 planes)
# set VTSWITCH to include virtualterminal switch code
# set FBREVERSE to reverse bit orders in1,2,4 bpp
# set FBVGA=N for all systems without VGA hardware (forMIPS must=N)
FRAMEBUFFER = Y
FBVGA = N #Y
VTSWITCH = N #Y
#or else output "#error VTSWITCH depends onMW_FEATURE_TIMERS"
FBREVERSE = N
# set HAVETEXTMODE=Y forsystems that can switch between text & graphics.
# On agraphics-only embedded system, such as Osprey and Embedded
#Planet boards, set HAVETEXTMODE=N
HAVETEXTMODE = Y
# svgalib screendriver
VGALIB = N
# direct VGA hardware accessscreen driver
HWVGA = N
####################################################################
#Mouse drivers
# GPMMOUSE gpm mouse
# SERMOUSE serialMicrosoft, PC, Logitech, PS/2 mice (/dev/psaux)
# SUNMOUSE SunWorkstation mouse (/dev/sunmouse)
# NOMOUSE no mousedriver
#
# Touchscreen drivers
# IPAQMOUSE Compaq iPAQ,Intel Assabet (/dev/h3600_tsraw)
# ZAURUSMOUSE Sharp Zaurus(/dev/sharp_ts)
# TUXMOUSE TuxScreen (/dev/ucb1x00-ts)
#ADSMOUSE Applied Data Systems GC+ (/dev/ts)
#ADS7846MOUSE ADS7846chip, PSI OMAP Innovator (/dev/innnovator_ts)
# EPMOUSE EmbeddedPlanet (/dev/tpanel)
# VHMOUSE Vtech Helio (/dev/tpanel)
#MTMOUSE MicroTouch serial (/dev/ttyS1)
# PSIONMOUSE Psion5 (/dev/touch_psion)
# YOPYMOUSE Yopy (/dev/yopy-ts)
#HARRIERMOUSE NEC Harrier(/dev/tpanel)
####################################################################
GPMMOUSE = Y
SERMOUSE = N
SUNMOUSE = N
NOMOUSE = N
IPAQMOUSE = N
ZAURUSMOUSE = N
TUXMOUSE = N
ADSMOUSE = N
ADS7846MOUSE = N
EPMOUSE = N
VHMOUSE = N
MTMOUSE = N
PSIONMOUSE = N
YOPYMOUSE = N
HARRIERMOUSE = N
LIRCMOUSE = N
# keyboard or null kbddriver
TTYKBD = Y #N
SCANKBD = N #Y
PIPEKBD = N
IPAQKBD = N
LIRCKBD = N
NOKBD = N
endif
# Secondary keyboarddrivers.
# You may have a normal keyboard driver in addition tothese
# drivers, e.g. for both normal keyboard and IRinput.
LIRCKBD2 = N
####################################################################
#Screen driver specific configuration
# SA1100_LCD_LTLEND 4bppdriver with arm SA1100 LCD controller
# INVERT4BPP 4bpp invertedpixel driver for VTechHelio
####################################################################
SA1100_LCD_LTLEND = N
INVERT4BPP = N
endif
make 后即可
nano-X的安装
修改Makefile,rules
INSTALL_PREFIX = /usr/local/arm/2.95.3
保存,makeinstall
[root@localhost src]# make install 2>&1 | tee~/nano-fltk/nanox-intall.log
Copying hdrs to/usr/local/arm/2.95.3/include/microwin
Copying libs to/usr/local/arm/2.95.3/lib
Copying binaries to/usr/local/arm/2.95.3/bin
Installation completed successfully.
/usr/local/arm/2.95.3/lib
-rw-r--r-- 1 root bin 1060 1月 2722:25 libmwdrivers.a
-rw-r--r-- 1 root bin 1058 1月 2722:25 libmwengine.a
-rw-r--r-- 1 root bin 1052 1月 2722:25 libmwfonts.a
-rw-r--r-- 1 root bin 277032 1月27 22:25libmwimages.a
-rw-r--r-- 1 root bin 888234 1月27 22:25libmwin.a
-rw-r--r-- 1 root bin 1008 1月 2722:25 libmwinlib.a
-rw-r--r-- 1 root bin 76738 1月27 22:25libnano-X.a
-rw-r--r-- 1 root bin 7862 1月 2722:25 libvncauth.a
/usr/local/arm/2.95.3/bin
-rwxr-xr-x 1 root bin 857336 1月 2722:25 nano-X
/usr/local/arm/2.95.3/lib
drwxr-xr-x 2 root root 4096 1月 2722:25 microwin
2 编译安装nxlib
首先是阅读nxlib-0.45/INSTALL文件:
/********************************************************************/
NXLIB build and installationinstructions
Version 0.44, May 30, 2003
1. Modify Makefile to setMicrowindows and X11 include and libdirectories
MWIN=/usr2/microwin/src
X11=/usr/X11R6
Microwindows v0.90 orlater must be used.
2. Modify Makefile to setX11 PCF font search directories(2)
X11_FONT_DIR1=/usr/lib/X11/fonts/100dpi
X11_FONT_DIR2=/usr/lib/X11/fonts/misc
3. Modify Makefile to setrgb.txt file location
X11_RGBTXT=/usr/lib/X11/rgb.txt
4. Modify Makefile to enableX11 shared library and version if desired
SHAREDLIB=Y
LIBNAME= X11
SOLIBREV = 6.2
CFLAGS += -DXCONST=_Xconst
Because of X11 hdrversion inconstencies, you may need to set
CFLAGS +=-DXCONST=_Xconst or CFLAGS += -DXCONST=
tocompile _Xconst in or out of a couple of function declarations.
5. Type "make".
Thisbuilds the library using your already-installed X11 headers.
IfDEBUG = -g, a larger library will be built with debuginformation.
If INCLUDE_XRM=Y, unmodified Xrm databaseroutines will be included.
6. DO NOT "makeinstall" UNTIL YOU BACK UP THE FOLLOWING LIBRARIES.
NOTE "make install" WILL BY DEFAULT OVERWRITE THE FOLLOWINGFILES:
/usr/X11R6/lib/libX11.so.*
(/usr/X11R6/lib/libX11.so/usr/X11R6/lib/libX11.so.6 /usr/X11R6/lib/libX11.so.6.2)
*********************************************************************/
然后修改Makefile文件:
MWIN=/usr/local/microwindows-0.91/src
CC= arm-linux-gcc
保存,然后make.出现如下错误:
arm-linux-gcc -Wall -g-I/usr/local/microwindows-0.91/src/include-DX11_FONT_DIR1=\"/usr/lib/X11/fonts/100dpi\"-DX11_FONT_DIR2=\"/usr/lib/X11/fonts/misc\"-DX11_RGBTXT=\"/usr/lib/X11/rgb.txt\" -I. -fPIC -o Quarks.o-c Quarks.c
In file included from Quarks.c:52:
Xresource.h:55:X11/Xlib.h: ?????????
make: *** [Quarks.o] Error 1
这时在编译Xrm(Xresource manager)时,出现错误,应该是头文件搜索路径没有设置好,所以造成找不到Xlib.h文件
[
注意此时的文件关系,nxlib和X11中都有Xresource.hXlib.h
从Quarks.c#include "Xresource.h" 来看是nxlib的Xresource.h
进入nxlib的Xresource.h,#include <X11/Xlib.h>来看是X11的Xlib.h
]
解决办法:
在nxlib目录的Makefile中增加X11的头文件目录
X11_INCLUDE=$(X11)/include
CFLAGS += -Wall $(DEBUG)-I$(MWIN_INCLUDE) -I$(X11_INCLUDE)
之后,编译顺利通过!
我们得到了想要的
libX11.so
libX11.so.6
libX11.so.6.2
libnx11.a
[[email protected]]# ls -l lib*
-rw-r--r-- 1 root root 4193830 1月27 21:12libnx11.a
lrwxrwxrwx 1 root root 13 1月 2721:12 libX11.so -> libX11.so.6.2
lrwxrwxrwx 1root root 13 1月 2721:12 libX11.so.6 -> libX11.so.6.2
-rwxr-xr-x 1 root root 557154 1月 2721:12 libX11.so.6.2
nxlib的安装,前面提到的INSTALL的第六点已经强调,若不更改安装路径会覆盖掉原系统的相关lib文件.
应谨慎行事!!!!
我们想把所有的arm环境的编译工具和库文件全部放入/usr/local/arm/2.95.3中
修改Makefile
INSTALL_DIR = /usr/local/arm/2.95.3/lib
保存,然后makeinstall
[root@localhost nxlib-0.45]# make install 2>&1 |tee ~/nano-fltk/nxlib-intall.log
rm -f/usr/local/arm/2.95.3/lib/libX11.so; \
mv libX11.so/usr/local/arm/2.95.3/lib
+ rm -f/usr/local/arm/2.95.3/lib/libX11.so.6
+ mv libX11.so.6/usr/local/arm/2.95.3/lib
rm -f/usr/local/arm/2.95.3/lib/libX11.so.6.2; \
mv libX11.so.6.2/usr/local/arm/2.95.3/lib
/usr/local/arm/2.95.3/lib
lrwxrwxrwx 1 root root 13 1月 2722:49 libX11.so -> libX11.so.6.2
lrwxrwxrwx 1root root 13 1月 2722:49 libX11.so.6 -> libX11.so.6.2
-rwxr-xr-x 1 root root 557154 1月 2722:49 libX11.so.6.2
3 编译fltk
[root@localhost fltk-1.1.7]#./configure --host=arm-linux --prefix=/usr/local/arm/2.95.3/ --with-x\
--x-includes=/usr/X11R6/include/--x-libraries=/usr/local/arm/2.95.3/lib/ \
2>&1 | tee~/nano-fltk/fltk-config.log
[root@localhost fltk-1.1.7]#make 2>&1 | tee ~/nano-fltk/fltk-make.log
Linkingfluid...
/usr/local/arm/2.95.3/arm-linux/bin/ld: cannot find-lXext
collect2: ld returned 1 exit status
make[1]: *** [fluid]Error 1+
[[email protected]]# make install 2>&1 | tee~/nano-fltk/fltk-install.log
/usr/local/arm/2.95.3/lib
[root@localhostlib]# ls -l libfltk*
-rw-r--r-- 1 root root 873420 1月28 19:20libfltk.a
-rw-r--r-- 1 root root 21852 1月28 19:20libfltk_forms.a
-rw-r--r-- 1 root root 55526 1月28 19:20libfltk_images.a
-rw-r--r-- 1 root root 184162 1月28 19:20libfltk_jpeg.a
-rw-r--r-- 1 root root 183636 1月28 19:20libfltk_png.a
-rw-r--r-- 1 root root 77762 1月28 19:20libfltk_z.a
/usr/local/arm/2.95.3/include
lrwxrwxrwx 1 root dip 2 1月 2819:20 Fl -> FL
drwxr-xr-x 3 root dip 8192 1月 2819:20 FL
/usr/local/arm/2.95.3/bin
-rwxr-xr-x 1 root root 6780 1月 2819:20 fltk-config
4、后续发现的问题
1)
/usr/local/arm/2.95.3/arm-linux/bin/ld:cannot find -lXext
collect2: ld returned 1 exitstatus
查看/usr/local/arm/2.95.3/bin/fltk-config脚本
去掉掉59行的-lXext
2)
/usr/local/arm/2.95.3/lib/libfltk.a(Fl_x.o):In function `Fl::paste(Fl_Widget &, int)':
Fl_x.o(.text+0xc90):undefined reference to`XConvertSelection'
/usr/local/arm/2.95.3/lib/libfltk.a(Fl_x.o):In function `Fl::copy(char const *, int, int)':
Fl_x.o(.text+0xde0):undefined reference to`XSetSelectionOwner'
/usr/local/arm/2.95.3/lib/libfltk.a(Fl_x.o):In function `fl_handle(_XEvent const &)':
Fl_x.o(.text+0x1880):undefined reference to`XConvertSelection'
/usr/local/arm/2.95.3/lib/libfltk.a(fl_dnd.o):In function `Fl::dnd(void)':
fl_dnd.o(.text+0x1c0): undefinedreference to `XSetSelectionOwner'
collect2: ld returned 1 exitstatus
在fltk论坛上有人出现同样的问题,并找到解决办法:
Nxlib-0.45Makefile is missing Selection.o
进入Selection.c里面有XSetSelectionOwner XGetSelectionOwner XConvertSelection 函数正是我们需要的
修改Makefile在OBJS中加入 Selection.o
重新编译nxlib
再maketest代码,成功通过!
5、在arm上运行
在arm上执行之前要先把之前做好的library跟server準備好︰
/bin/nano-X
/lib/libnano-X.so
/lib/libX11.so.6.2
ln-s libX11.so.6.2 libX11.so
ln -s libX11.so.6.2 libX11.so.6
# nano-X &
将nano-X放入后台执行
然后就可以运行编译好的程序了
我到这里时出现一些问题,fltk程序还不能运行,总是会出现一些错误,暂时不能解决!