openSUSE 编译 Windows版本的 Bernese

转载请注明:来源于http://my.oschina.net/snnugiser/blog/354991

        去年心血来潮,把GAMIT在Windows 下编译安装了一下,当时主要是在Cygwin环境下编译,装好了之后顿时觉得自己逼格高了不少。昨天突然想把Bernese装在linux上,但是手上只有bernese 的 windows版本。

        但是bernese毕竟是有源码的,本着事在人为的想法,老衲横下一条心觉得把Bernese的windows版本装在Linux,大不了自己写makefile嘛

主要参考的资料有 

1. Installing BERNESE 5.0 on Mac OS X 

http://www.ecgs.lu/gilles/blog/installing-bernese-5-0-on-mac-os-x-10-6/  

2. bernese compile list

http://www.bernese.unibe.ch/support/cmp_all_list.php

 下面开始动手,首先是准备工作

  1. 首先是准备安装的文件。把bernese 安装在windows上,完全安装是4个文件夹

    四个文件夹包括 BERN52,GPSDATA,GPSTEMP,GPSUSER52

    把其中的BERN52 文件夹全部拷贝到linux上,比如~/BERN52. 其他的文件夹后面可以生成。

  2. 检查perl是否安装。若没有安装先安装

$ perl --version #if error run next line
$ sudo zypper in perl #if rhel use yum or debian use apt-get

    3. 检查qt3是否安装,若没有安装先安装

$ find / -name qt3 # if find qt3 and the path is /usr/lib/qt3 run next line
$ /usr/lib/qt3/bin/qmake --version #if the version is not 3.x   you should install qt3-devel

    4. 修改环境变量文件。这一步是用第 Installing BERNESE 5.0 on Mac OS X  的LOADGPS.setvar

注意,要把其中的环境变量改成自己的,比如

export OS="UNIX"
export OS_NAME="LINUX"
export F_VER="GNU" #if you use gfortran compile
export QTBERN="/usr/lib/qt3"

    老衲已经把一份修改过的LOADGPS.setvar 文件放在了github上 https://gist.github.com/859a1edd3009280d5a91.git

    要把这个文件放在  BERN52/GPS/EXE/  文件夹下。

    5. 修改 BERN52/MENU/menu.pro 文件,把其中一行注释掉,其实是 想在编译的时候加上-lz选项

QMAKE_LIBS += -lz -lQtNetwork

Installing BERNESE 5.0 on Mac OS X   提到将 BERN52/MENU/Makefile 中的一行加上 -lz 选项

LIBS     = $(SUBLIBS) -L/opt/local/lib -L$(QTDIR)/lib -L/opt/local/lib -lICE -lSM -ldl -lqt-mt -lXext -lX11 -lm -lz

老衲这样试过,发现Makefile是利用qmake生成的,就算该了这一行,qmake一运行又把这个文件覆盖掉了,索性改qmake的pro文件。加上-lz选项的原因是编译的时候出现uncompress的错误提示,具体原因还不得而知。

 6. 编辑BERN52/GPS/EXE/configure.pm文件,将933-937行注释掉

#  my $cashFile = "$ENV{QTDIR}/.qmake.cache";
#  if (! -f $cashFile) {
#    die "File $cashFile not found\n".
#        "Please make sure that the QT library has been installed correctly.\n";
#  }

Then edit line 956 to read like from:

system("$qmake -cache $cashFile menu.pro");

to:

 system("$qmake menu.pro");

 7. 把下面的片段加入BERN52/EXE/Makefile.template文件最前面。这一段是设置编译器和编译选项,来自http://www.bernese.unibe.ch/support/cmp_linux_gnu.php 

# GNU Fortran (external preprocessor)
# -----------
ifeq ($(F_VERS),GNU)
  CPP     = cpp -traditional-cpp
  CPPDEFS = -DOS_UNIX -DCMP_GNU -DEPH_$(JPLEPH) -DGRP_$(CGROUP)
  FPPDEFS =

  F77     = gfortran
  FC      = gfortran
  LD      = gfortran
  FCVERS  = --version | head -n2

  ifeq ($(F_DEBUG),YES)
    FFLAGS  = -c -g -Wall -Wextra -fbacktrace -fbounds-check \
              -I. -I$(C)/LIB/OBJ_$(F_VERS)c -I$(I) $(FC_OPTIONS) -fno-automatic
    FCFLAGS = -c -g -Wall -Wextra -fbacktrace -fbounds-check \
              -I. -I$(C)/LIB/OBJ_$(F_VERS)c -I$(I) $(FC_OPTIONS)
  else
    FFLAGS  = -c -O -Wall -fbacktrace \
              -I. -I$(C)/LIB/OBJ_$(F_VERS) -I$(I) $(FC_OPTIONS) -fno-automatic
    FCFLAGS = -c -O -Wall -fbacktrace \
              -I. -I$(C)/LIB/OBJ_$(F_VERS) -I$(I) $(FC_OPTIONS)
  endif

  LDFLAGS =
endif

8. 修改configure.pm文件 ,将下面几行注释掉

# Not very nice, but it works as /bin/sh in any case...
#   system("echo \"$$self{C}/GPS/EXE/makemake.pl -r $$self{C} >$complinkLog 2>&1\"|sh");
#   system("echo \"$$self{C}/GPS/EXE/CBERN COMPLINK          >>$complinkLog 2>&1\"|sh");
# }
# else {

   这几行是判断如果不是windows平台,就执行这两行,但是我在opensuse下执行,发现这第二行是无法正确解析的,索性注释掉,系统调用外部命令执行。可能对于其他版本的linux,可以不用注释

    system("perl $$self{C}/GPS/EXE/makemake.pl -r $$self{C} >$complinkLog 2>&1");
    print "start cbern complink\n";
    system("perl $$self{C}/GPS/EXE/cbern.pl COMPLINK     >>$complinkLog 2>&1");

    9. 从这个网址下载三个文件到 BERN52/GPS/DOC/文件夹下

http://www.bernese.unibe.ch/download/ 

分别是 DATAPOOL.tgz ,CAMPAIGN52.tgz , SAVEDISK.tgz (由于需要解压,机器上应有tar 和 gzip 工具)

准备好之后可以安装了

$ perl configure.pm --init

依次选择1, 2, 3, 4, 5,分别是设置环境变量、添加用户、编译菜单、编译主程序,安装campaigns

最后是设置环境变量,在.bashrc文件中添加两行

source $X/EXE/LOADGPS.setvar
alias bern52='$C/MENU/menu $X/PAN/MENU.INP'

 重新读取.bashrc后,输入bern52 即可出现BERNESE的主界面。

$ source .bashrc
$ bern52&

注意:由于用的bernese是windows版本,因此文本文件行尾是\r\n,而unix/linux默认是\n,所以在编译过错中可能会出错。解决办法是用dos2unix,下面是一个很好的解决办法

find ./ -name *.f*|xargs dos2unix

-----------------------------------------

bernese 的BPE是 $C/BPE/RUNBPE.pm 实现的,其中调用了menu.sh这个文件,然而老衲并没有发现这个文件,于是新建一个menu.sh的文件,内容如下

#!/bin/sh
menu $1 $2 $3 $4

实际上是调用sh把参数传给了menu程序.

或者将RUNBPM.pm中的menu.sh改为menu

$irc = system("$xq/menu", "$menuOption", "$menuTodo"); #zhliang changed menu.sh to menu


你可能感兴趣的:(linux,编译,bernese)