Compile & install GRASS 6.4 on ubuntu intrepid

首先,需要自己重新编译GDAL,目前UBUNTU源里的GDAL有BUG。
然后,从svn中下载grass 6.4:

svn co https://svn.osgeo.org/grass/grass/branches/develbranch_6 grass-6.4
cd grass-6.4/debian
svn://svn.debian.org/pkg-grass/packages/grass/branches/6.4/debian debiangis
mv debiangis/* .

目前,这个DEB控制还有点小问题,需要自己作些修改:

nano grass.conf

把路径修改为:

/usr/lib/grass64/lib

然后修改grass-preview-doc.links,修改为:

usr/share/doc/grass-preview-doc/html usr/lib/grass64/docs/html

还需要连接一个so库:

locate _gdi_.so

我的机器上有两个地址,一个是python 2.4,一个是python 2.5,我选择了python 2.5的地址,然后作了个连接:

sudo ln -s /usr/lib/python2.5/site-packages/wx-2.8-gtk2-unicode/wx/_gdi_.so /usr/loca/lib/libgdi.so

然后就可以编译了:

debuild binary

然后就可以安装了,你若不想安装,可以使用我已经编译好的,(添加我自己的源):

http://ubuntu.westgis.ac.cn/ubuntu

然后sudo aptitude install grass-preview就可以了。

如要安装文档:

sudo aptitude install grass-preview-doc
sudo mkdir /usr/lib/grass64/docs
sudo ln -s /usr/share/doc/grass-preview-doc/html /usr/lib/grass64/docs/

cross compile QT4 program for windows on ubuntu dapper

1、首先安装基础程序:
sudo wine mingw32 mingw32-binutils mingw32-runtime
2、安装QT4支持(LINUX下的支持):
sudo apt-get install libqt4-core libqt4-gui libqt4-qt3support libqt4-sql libqt4-debug-dev libqt4-dev
3、下载QT4 for win程序:
wget http://wftp.tu-chemnitz.de/pub/Qt/qt/source/qt-win-opensource-4.1.2-mingw.exe
4、安装:
wine qt-win-opensource-4.1.2-mingw.exe
中间会提示找不到MINGW32的位置,没关系,可以直接跳过。
5、修改specs文件
sudo cp -Rf /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++
sudo nano /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf
把和下面相关的内容都进行修改:

QMAKE_CXX = i586-mingw32msvc-g++

QMAKE_INCDIR = /usr/i586-mingw32msvc/include/
QMAKE_INCDIR_QT = /usr/local/qt4-w32/4.1.2/include
QMAKE_LIBDIR_QT = /usr/local/qt4-w32/4.1.2/lib

QMAKE_LINK = i586-mingw32msvc-g++

# ne pas oublier le -mwindows ici
QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows

#isEqual(MINGW_IN_SHELL, 1) {
QMAKE_DIR_SEP = /
QMAKE_COPY = cp
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm -f
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rm -rf
#} else {
# QMAKE_COPY = cp
# QMAKE_COPY_DIR = cp -r
# QMAKE_MOVE = mv
# QMAKE_DEL_FILE = rm -f
# QMAKE_MKDIR = mkdir -p
# QMAKE_DEL_DIR = rm -rf
#}

# Enlever les .exe et rajouter -qt4
QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc-qt4
QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic-qt4

# Je n’ai pas trouvé d’équivalent de ce fichier, j’ai quand meme enlevé le .exe
QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc

QMAKE_RC = i586-mingw32msvc-windres

QMAKE_STRIP = i586-mingw32msvc-strip

6、QT4的跨平台编译支持就完成了,以后可以这样编译WINDOWS程序:
qmake-qt4 -project
qmake-qt4 -spec win32-x-g++
make

编译sqlite for windows on ubuntu dapper

参考其中的SQLITE部分: http://mpa.itc.it/radim/wingrass/INSTALL

下载源码,解压缩:

cd sqlite-3.3.5
nano Makefile.linux-gcc
#modify:
#TOP = ../sqlite-3.3.5
#这个修改不知道有没有意义

# Note: SQLite is using for example its own parser (lemon) which must be compiled first for Linux

make -f Makefile.linux-gcc lemon keywordhash.h

cp Makefile.linux-gcc Makefile.mingw-gcc

nano Makefile.mingw-gcc
# modify Makefile.mingw-gcc (BCC,TCC,AR,RANLIB):
# 修改一下相关部分:
# BCC = i586-mingw32msvc-gcc -g -O2
# TCC = i586-mingw32msvc-gcc -O6
# AR = i586-mingw32msvc-ar cr
# RANLIB = i586-mingw32msvc-ranlib

# delete tclsqlite.o from LIBOBJ in main.mk

make -f Makefile.mingw-gcc libsqlite3.a

i586-mingw32msvc-g++ –shared -o sqlite3.dll \
-Wl,–out-implib=libsqlite3.dll.a \
-Wl,–export-all-symbols \
-Wl,–enable-auto-import \
-Wl,–whole-archive libsqlite3.a \
-Wl,–no-whole-archive -lmingw32

i586-mingw32msvc-strip sqlite3.dll
cp sqlite3.dll /usr/i586-mingw32msvc/bin/
cp libsqlite3.dll.a /usr/i586-mingw32msvc/lib
cp sqlite3.h /usr/i586-mingw32msvc/include

编译wxWidgets for windows on ubuntu dapper

原文:http://www.wxwidgets.org/wiki/index.php/Cross-Compiling_Under_Linux

下载allportscombine包,然后:

./configure –with-msw –target=i586-mingw32msvc –host=i586-mingw32msvc –build=i386-linux –enable-unicode –prefix=/usr/i586-mingw32msvc/
make
make install

注意编译的时候要分两步走,不能象G++那样一步到位:

i586-mingw32msvc-g++ -c -o minimal.o minimal.cpp `/usr/i586-mingw32/bin/wx-config –cxxflags`

i586-mingw32msvc-g++ -o minimal.exe minimal.o `/usr/i586-mingw32/bin/wx-config –libs`

因为wxWidgets是以动态库的方式编译的,还需要拷贝相关的DLL:

cp /usr/i586-mingw32msvc/lib/wx*.dll .

同时,还要拷贝mingw32的一个库过来:

cp /usr/share/doc/mingw32-runtime/mingwm10.dll.gz .
gzip -d *.gz

然后就可以进行测试了:
wine minimal.exe

编写多平台编译的C++代码

好东西,学习一下。

存一个到自己的BLOG。

使用C++编写软件的时候,经常需要同时在多个OS/Compiler平台上编译。在进行设计决策的时候,事先考虑到跨平台的需求,能够有效的减少后期的工作量。

在代码编写时,尽量避免使用OS/Compiler相关API或者语言扩展。这里有一些建议,比如,在做GUI时,不要使用MFC,否则在类 UNIX平台就要完全重写了。可以使用一个可移植的GUI工具,比如使用TCL/TK来编写界面或者使用一个可以在多个平台上使用的GUI库,著名的有 wxWindows。在需要使用线程或者同步原语的地方,可以使用一些多平台的库,比如使用boost中的线程,或者专用的多平台线程库,比如 ZThread。实在无法避免的,就使用编译开关#ifdef、#endif。另外,如果要支持的UNIX平台种类很多,还要注意,有些OS上的编译器对模版的支持不太好。

除了代码,还有一个很重要的是Makefile。在Windows上,如果使用VC,可以用工程文件,也可以使用VC的nmake编译 Makefile。在Unix上,编写大工程的支持工具有autoconf和automake。autoconf可以自动的生成configure脚本, configure脚本能够全面检测不同的OS和Compiler的特征,为编译C++代码提供了很大的方便。

生成configure,最重要的是configure.in和一组m4文件构成。不同的m4文件分别检测系统的不同特征,然后再 configure.in中指定使用那些m4;automake负责从用户编写的Makefile.am中生成Makefile.in文件。最后在编译时,使用经典的三个步骤;

./configure

make

make install

就可以编译所有的代码了。

一个要注意的问题,不同平台的make的语法可能不同,在solaris上臭名卓著的“Unexpect end of line seen”错误很难解决,推荐使用GNU make。

将autoconf、automake和daily build技术结合,能很好的发挥他们的作用。

如果对autoconf和automake工具没有信息,可以考虑一个新的Makefile生成工具。推荐CMake,它可以生成几乎所有平台的Makefile,甚至包括VC和Borland公司的make。

不论使用什么工具,编译多平台编译代码都是一个tedious、error prone的过程。

原文: http://www.blogbus.com/blogbus/blog/diary.php?diaryid=428246