GCC 2.8.0 for openVMS/Alpha 6.2/7.1安装

发表于:2007-06-09来源:作者:点击数: 标签:
This is a full release of the GNU Compiler System for the openVMS/Alpha 6.2 or 7.1 environment. A release for other openVMS versions and for openVMS/VAX will be made later. 转载于:http://www.tmk.com/ftp/vms-freeware/gcc-for-alpha/installa
This is a full release of the GNU Compiler System for the openVMS/Alpha 6.2
or 7.1 environment. A release for other openVMS versions and for openVMS/VAX
will be made later.

转载于:http://www.tmk.com/ftp/vms-freeware/gcc-for-alpha/installation

GNU C Compiler Version 2.8.0 for openVMS/Alpha 6.2 and 7.1



Provided by Klaus Kaempf (kkaempf@progis.de)





Installation Instructions





This is a full release of the GNU Compiler System for the openVMS/Alpha 6.2

or 7.1 environment. A release for other openVMS versions and for openVMS/VAX

will be made later.





If you're used to GNU C on openVMS/VAX 





It is assembled from various pieces of software that are all freely available

under the GNU public license.



GNU Make 3.76

GNU Binutils 2.8 (nm, objdump, size, strings)

GNU Assembler 2.8

GNU C 2.8.0

GNU C++ 2.8.0

GNU libg++ 2.8.0



Source for this software isn't available on ftp.progis.de yet, look for it on

prep.ai.mit.edu or any of it's mirror servers



All programs are compiled with the GNU compiler.





The software is packaged in .ZIP format to conserver VMS file attributes and

to make the installation very easy. If you don't have UNZIP for VMS, get it from

'ftp.progis.de/pub/vms/utils/unzip.exe' and install it as a foreign command. Be sure

to use the binary format with ftp !



For GNU C on openVMS/Alpha 6.2 you'll need the following files:



ftp.progis.de/pub/vms/gnu/6_2/bin.zip

ftp.progis.de/pub/vms/gcc/6_2/gcc-2_8_0.zip

ftp.progis.de/pub/vms/gcc/gnu_setup.com

ftp.progis.de/pub/vms/gcc/login.com



For GNU C on openVMS/Alpha 7.1 you'll need the following files:



ftp.progis.de/pub/vms/gnu/7_1/bin.zip

ftp.progis.de/pub/vms/gcc/7_1/gcc-2_8_0.zip

ftp.progis.de/pub/vms/gcc/gnu_setup.com

ftp.progis.de/pub/vms/gcc/login.com



For GNU C and GNU C++ on openVMS/Alpha 6.2 you'll need:



ftp.progis.de/pub/vms/gnu/6_2/bin.zip

ftp.progis.de/pub/vms/gcc/6_2/gxx-2_8_0.zip

ftp.progis.de/pub/vms/gcc/gnu_setup.com

ftp.progis.de/pub/vms/gcc/login.com



GNU C++ for openVMS/Alpha 7.1 isn't available yet.



*** Remember to set your ftp to 'IMAGE' or 'BINARY' ***



1. Creating a directory for GNU



This release follows more closely the GNU naming scheme for directories as

used on un*x systems. This allows for easy installation of other gnu software

and makes administration more clearly.

All files are installed below GNU_ROOT:[000000] which serves as the '/usr/local'

directory tree entry point in un*x gnu installations.

Below that, the following directories are typically needed:



GNU_ROOT:[BIN]		gnu .exe files

GNU_ROOT:[CLD]		vms .CLD files for gnu utilities

GNU_ROOT:[INCLUDE]	non compiler specific include files (like flexlexer.h from flex)

GNU_ROOT:[SHARE]	shared files (like bison skeleton files)

GNU_ROOT:[LIB]		non compiler specific library files

GNU_ROOT:[INFO]		emacs .info files

GNU_ROOT:[ALPHA-PROGIS-VMS_6_2]

			target specific compiler files

GNU_ROOT:[ALPHA-PROGIS-VMS_6_2.2_8_0]

			target and compiler version specific files.

			The logical GNU_CC_LIBRARY points to this directory.

GNU_ROOT:[ALPHA-PROGIS-VMS_6_2.2_8_0.INCLUDE]

			gnu c compiler specific include files.

			The concealed logical GNU_CC_INCLUDE points to this directory.

GNU_ROOT:[ALPHA-PROGIS-VMS_6_2.2_8_0.GXX-INCLUDE]

			gnu c++ compiler specific include files.

			The concealed logical GNU_GXX_INCLUDE points to this directory.

			



You must create a directory for GNU_ROOT and put 'gnu_setup.com' into this directory.



Then set your default directory there (with $ set def) and execute the following DCL commands:



$ define GNU_CC_VERSION 2_8_0

$ @GNU_SETUP



This sets up all needed logicals.



Now set your default directory to GNU_ROOT:[000000]



$ set def GNU_ROOT:[000000]





2. Installing GNU utilities



Unpack BIN.ZIP below GNU_ROOT:[000000] with



$ set def GNU_ROOT:[000000]

$ unzip BIN.ZIP



This creates the directory GNU_ROOT:[BIN] and extracts the following files to it



GNU_ROOT:[BIN]AS.EXE		gnu assembler 2.8

GNU_ROOT:[BIN]GASP.EXE		gnu assembler preprocessor 2.8

GNU_ROOT:[BIN]MAKE.EXE		gnu make 3.76

GNU_ROOT:[BIN]NM.EXE		gnu nm 2.8

GNU_ROOT:[BIN]OBJDUMP.EXE	gnu objdump 2.8

GNU_ROOT:[BIN]SIZE.EXE		gnu size 2.8

GNU_ROOT:[BIN]STRINGS.EXE	gnu strings 2.8

GNU_ROOT:[BIN]GCC.EXE		gnu c compiler driver, first part

GNU_ROOT:[BIN]GCC.COM		gnu c compiler driver, second part





3. Installing the C-Compiler



If you also want the C++ compiler, skip to step 4.



Unpack GCC-2_8_0.ZIP below GNU_ROOT:[000000] with



$ set def GNU_ROOT:[000000]

$ unzip GCC-2_8_0



This creates the directory GNU_ROOT:[ALPHA-PROGIS-VMS_6_2.2_8_0] (named

GNU_CC_LIBRARY below) and extracts the following files to it:



GNU_CC_LIBRARY:cpp.exe		gnu c preprocessor

GNU_CC_LIBRARY:cc1.exe		gnu c compiler

GNU_CC_LIBRARY:crt0.obj		ansi c compatible startup file

GNU_CC_LIBRARY:crt1.obj		dec c compatible startup file

GNU_CC_LIBRARY:libgcc.olb	gnu c compiler library

GNU_CC_LIBRARY:macrosc.vms	gnu c preprocessor macros

GNU_CC_LIBRARY:[include]	gnu c include files





4. Installing the C++-Compiler



Unpack GXX-2_8_0.ZIP below GNU_ROOT:[000000] with



$ set def GNU_ROOT:[000000]

$ unzip GXX-2_8_0



This creates the directory GNU_ROOT:[ALPHA-PROGIS-VMS_6_2.2_8_0] (named

GNU_CC_LIBRARY below) and extracts all the files from GCC-2_8_0.ZIP (see

step 3 above) and the following files to it:



GNU_CC_LIBRARY:cc1plus.exe		gnu c++ compiler

GNU_CC_LIBRARY:crtbegin.obj		start hook for static constructors

GNU_CC_LIBRARY:crtend.obj		end hook for static constructors

GNU_CC_LIBRARY:gxx_main.obj		gnu c++ startup file

GNU_CC_LIBRARY:libgccplus.olb		gnu c++ compiler library

GNU_CC_LIBRARY:macroscc.vms		gnu c++ preprocessor macros

GNU_CC_LIBRARY:[gxx-include]		gnu c++ include files





5. Changes in your LOGIN.COM



The GNU compiler setup and the definition of foreign commands is done

with the file LOGIN.COM

This should be executed every time you log in, so it is best included

in your own login.com





6. Working with the compiler



GNU C isn't a direct 'drop-in' replacement for DEC C although it understands

most of the parameters. If you want to pass special parameters to the GNU preprocessor,

add them with /cpp="parameter". Passing parameter to the C compiler cc1 is done

with /cc1="parameter".



By default, GNU C uses the IEEE floating point format on Alpha.





7. Linking programs



Linking object files to make an executable isn't easy but GNU Make has default

rules for most cases. If you have a source file called 'program.c', running

'make program.exe' will do all needed work for you.



GNU C uses the DEC C runtime library as the standard C library. Get the latest version

as there are *lots* of bugs in DECCRTL.OLB, especially in the stdio part. See

www.services.digital.com for updates.



A typical link command for an object file 'cprogram.obj' would be:



link/exe=cprogram.exe cprogram.obj,			! gnu c compiled program

		      GNU_CC_LIBRARY:libgcc.olb/lib,	! gnu c compiler utility routines

		      sys$library:vaxcrtl.olb/lib,	! standard C routines

		      GNU_CC_LIBRARY:crt0.obj 		! startup file



The DEC C runtime library (DECCRTL) is linked automatically.



The handling of exit values is different between VMS and the rest of the world.

VMS uses odd values for 'success' and even values for 'failure'. Almost all other

OS use zero for 'success' and non-zero for 'failure', so do most C programs.

So running a standard C program which returns '1' for failure isn't recognized

on VMS as an error. The startup file 'crt0.obj' doubles the exit code from 'main()'

before returning the value to VMS. So programs returning a non-zero exit code

are guaranteed to return an odd value to VMS, signalling 'error'.

If you link a VAX C or DEC C program, replace crt0.obj by crt1.obj in the link command.





Linking C++ programs is a different issue alltogether. Since C++ has to go through

all static constructors *before* calling main(), a 'constructor chain' has to be

build up. This is done with the files crtbegin.obj, which must be linked before the first

GNU C++ compiled file, and crtend.obj, which must be linked after the last GNU C++

compiled file. The startup file 'gxx_main' links all constructors together and

executes them to make sure all static objects are properly initialized.



Because of this, linking a C++ program is complicated:



link/exe=cxxprogram.exe GNU_CC_LIBRARY:crtbegin.obj,		! start hook for constructor chain

			sys$disk:[]cxxprogram.obj,		! gnu c++ compiled program

			GNU_CC_LIBRARY:libstdcxx.olb/lib,	! gnu c++ standard library

			GNU_CC_LIBRARY:libgccplus.olb/lib,	! gnu c++ compiler utility routines

			GNU_CC_LIBRARY:crtend.obj,		! end hook for constructor chain

			sys$library:vaxcrtl.olb/lib,		! standard C routines

			GNU_CC_LIBRARY:libgcc.olb/lib,		! gnu c compiler utility routines

			GNU_CC_LIBRARY:gxx_main.obj		! startup file



A. Reporting bugs





The GNU compiler system based on GNU C 2.8.0 on openVMS/Alpha has bugs. Period.



If you need a stable compiler with professional support, think about purchasing

the GNUPRO 64 compiler system from proGIS Software. Mail to info@progis.de or

visit the web site at http://www.progis.de.

I can only give support for the free version as time permits.





However, it passes the GNU c-torture test and compiles itself and all other

mentioned gnu utilities.



If you run into a bug, there are three traps you might have fallen into.



- Bugs in the GNU compiler itself

  If you find a bug in the GNU compiler itself, you should wait for the next

  version which is planned for end of january 1998.



- Bugs in the GNU compiler port to openVMS/Alpha

  Get in contact with me (kkaempf@progis.de) and I will try to help you out.



- Bugs in the include files.

  This will most certanly happen if you use VMS specific include files. All of

  them are based on the freely available include file set for openVMS/*VAX*

  If ported most of the files and added a comment at the beginning of the file.

  If you use a file without such a comment, mail me for a replacement.





**** IMPORTANT ****



If you report a bug to me, *** DON'T *** send me your source code but try to

explain what's going wrong in english (or better in german :-)



Please start the subject with '[GNUC]' !



!!!! Mail with more than about 50 lines of text go into the bit bucket !!!!



If I need the source, I will tell you.





Have fun !



原文转自:http://www.ltesting.net