home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
c
/
comp-faq.zip
/
COMP-FAQ
next >
Wrap
Text File
|
1993-01-27
|
63KB
|
1,638 lines
FREQUENTLY ASKED QUESTIONS ABOUT COMPILING KHOROS
date last updated: Sept 25, 1992
Sept 28, 1992
fixed A3, A6, A9, Q28, added Q29
Oct 03, 1992
added new Q1, Q2, Q4, Q5, Q6,
scooted other #'s down
Oct 27, 1992
added Q35 - Q37
( Please Read! Please Redistribute! )
( Also - Please See the General Khoros FAQ )
Contents: Questions 1 - 37
* installing Khoros on IBM RS6000, 386/486, HP
* compiling Khoros with shared libraries
* compiling Khoros with X11R5
* Makefiles, Imakefiles (compiling new programs)
* compiling with/without FORTRAN
* compiling with gcc
* and more!
---------- Installing Khoros on various architectures -----
Q1. What machines does Khoros currently run on?
Q2. I have machine X running operating system Y (not listed in A1).
Has anyone ported Khoros to this architecture?
Q3. I want to install Khoros on an IBM RS/6000 workstation
running under AIX x.x {and am getting error messages from the
C compiler} {and would like more info} {has anybody done this}
{are binaries available}?.
Q4. I want to install Khoros on a 386/486 machine {and am getting
error messages from the C compiler} {and would like more info}
{has anybody done this} {are binaries available}?.
Q5. I want to install Khoros on an HP under HP-UX x.x {9000/s370,
s400, s800, or s700}. {and am getting error messages from the
C compiler} {and would like more info} {has anybody done this}
{are binaries available}?.
Q6. I want to install Khoros on a Convex, under ConvexOS x.x
{and am getting error messages from the C compiler} {and
would like more info} {has anybody done this} {are binaries available}?.
Q7. Can I run Khoros on my PC? Is Khoros available for PC's running DOS?
Q8. Is there a port of Khoros for a VMS system?
----------- Compiling with shared libraries -----
Q9. What are shared libraries? Does Khoros work with shared libraries?
What are the advantages/disadvantages of using shared libraries?
Should I compile Khoros with shared libraries?
Q10. Why do I get unresolved references when I compile Khoros with
shared libraries on a SUN4?
Q11. When compiling shared, I get a large set of errors from
the loader listed in my make.World file, as in:
rm -f vadd
cc -o vadd vadd.o -L/home/holst/khoros/lib -L/mnt/elocal/lang/SC1.0
-O -Bdynamic -lghost -lvexpr -lnum_anal -ldspl -lformat
-lgeo_surf -lvipl -lvutils -lvmath -lvrast -lvgparm -lverror
-ltiff -lm -ll -ldl
ld: Undefined symbol
_cg_
_zgedi_
_zgeco_
_zgesl_
_zsvdc_
_ch_
_dgesl_
_dgefa_
_e_wsfe
_pow_ii
_s_wsFe
_s_stop
*** Error code 2
install in ./vipl/arith_binary/vadd done
make: Warning: Target `install' not remade because of errors
Q12. I am compiling [some xvroutine] against X11R5 with shared libraries.
The linker produces this error message:
ld: /lib/libXaw.sa.5.0(sharedlib.o): _formWidgetClass: multiply defined
/lib/libXaw.sa.5.0(sharedlib.o): _labelWidgetClass: multiply defined
*** Error code 2
make: Fatal error: Command failed for target `{xvroutine}'
Q13. I am having problems using cantata (or other xvroutine)
after recently compiling on a SUN with shared libraries. I get the
error message:
Warning: Widget class VendorShell version mismatch (recompilation needed):
widget 11004 vs. intrinsics 11003.
Warning: Widget class Form version mismatch (recompilation needed):
widget 11004 vs. intrinsics 11003.
Q14. Warpimage {or other xvroutine} did not compile after on a SUN4
architecture with static libraries; in fact, it made the cc compiler
segmentation fault and core dump! What happened?
Q15. Khoros compiled ok under shared libraries. However, when I try to
use the programs, I get messages that say:
lib{something}.so.1 not found
------------ Compiling with X11R5 -----
Q16. Can I compile Khoros with X11R5?
Q17. I am compiling Khoros with MIT's X11R5. When linking xvroutines
(cantata, editimage, etc), the compiler tells me that
_viewportWidgetClass is multiply defined. What's the problem?
------------ Makefiles, Imakefiles (compiling new programs) -----
Q18. I don't want to compile Khoros source, but I want to compile
my own programs so I need the libraries. How can I obtain the
Khoros libraries?
Q19. I am trying to compile an xvroutine, and when I run make install
I get the error:
installing in ./{xvroutine}...
Make: Don't know how to make {KHOROS_HOME}/lib/libdisplay.a.
Stop.
*** Error code 1
Q20. I want to link a {vroutine/xvroutine} for dbx.
Q21. I want my {vroutine/xvroutine} to use some specific
include files and special libraries.
Q22. Is there a way to get ghostwriter to automatically generate
the Makefile so that it will look for other include directories
and libraries?
------------ Compiling With gcc -----
Q23. I'm having a problem with gcc:
% gcc test.c -I/usr/local/include -I$KHOROS_HOME/include
In file included from KHOROS_HOME/include/vinclude.h:128,
from test.c:3:
KHOROS_HOME/include/vdefines.h:219: conflicting types for `malloc'
/usr/local/{...}/include/malloc.h:41: previous declaration of `malloc'
KHOROS_HOME/include/vdefines.h:223: conflicting types for `calloc'
/usr/local/{...}/include/malloc.h:39: previous declaration of `calloc
Q24. I noticed in the make.World file is that a few files are compiled
using 'cc', while some others are compilied using 'gcc'. Is this normal?
Also, there were messages like:
gcc: file path prefix `dynamic' never used
------------ Compiling With/Without FORTRAN -----
Q25. Do I HAVE to have FORTRAN to compile Khoros? Which Khoros programs
will I miss out on if I don't compile with FORTRAN?
Q26. How do I compile the Khoros system without FORTRAN?
Q27. I don't have a FORTRAN compiler, but I need the Khoros programs that
use FORTRAN. What can I do?
Q28. I am writing a {vroutine/xvroutine} in which I need to make a call
from my C code to a FORTRAN subroutine. How do I do this?
Q29. I am setting up my *.cf configuration file in preparation for compiling
Khoros. How do I find out what libraries the linker expects in order
to link C code against FORTRAN, in order to provide the proper
libraries for the ForSysLibs option?
------------ Miscellaneous -----
Q30. I seem to be having some trouble getting Khoros working on our Sun 3.
I have tried executing {cantata, editimage, etc} {journal playbacks},
but I keep getting the error "ld.so: libXaw.so.4: not found".
Q31. Since RPC isn't implemented yet, I defined UseSunRPC as NO in my
sun.cf file. Compiling phantomd results in the following message:
ld: Undefined
_sunrpc_tempnam
_sunrpc_gethostname
Q32. On Sun3, OS 4.1.1, a segmentation fault results when cantata is run.
Q33. During the compile of Khoros, I get this error message:
/: write failed, file system is full
compiler(iropt) error: write_irfile: No space left on device
Q34. I am trying to compile a {toolbox, new program, etc}, but "make"
keeps giving me error messages that say:
make: Fatal error:
Don't know how to make target `{KHOROS_HOME}/lib/lib{something}.a
Q35. Where in the Khoros Manual is the documentation relating to installation
of programs in Khoros?
Q36. How does one selectively fix a program and recompile it without doing
the whole installation process again?
Q37. When I try to compile dzresp, dfilter, mat2viff, etc., I get
unresolved symbols for _dspl_parse, _format_parse, and _vexpr_parse.
Where do I find these routines?
===============================================================================
=========== Installing Khoros on Various Architectures ======================
Q1. What machines does Khoros currently run on?
A1. Khoros 1.0 compiles on the following machines (MIT X unless
otherwise noted):
ApolloDN10000 OS 10.3, Fortran 10.8, cc 6.8
CRAY YMP's, XMP's, Cray II's running UNICOS 6.0, and 6.1.
DEC 5000/3100 Ultrix 4.2, mips cc 2.0, DEC f77 V3.0-2
DEC Vax 3600 Ultrix 4.1, cc1.37.1
HP 9000/* HP-UX 7.05, HP-UX 8.05
IBM RS/6000 AIX v3.1
OMRON Luna88k Mach 2.5, gcc 1.37, f77 1.8.5
NeXT 68030,40 MACH 2.0, gcc 1.37, Absoft f77 2.0, Pensoft X
SGI All OS 3.3.2, OS 4.0, X11 1.2, f77 3.3
SUN SPARCstations, SUN4 SUN OS 4.1.1, f77 1.4.5
SUN SUN3/ SUN OS 4.1.1, f77 1.3.1, gcc 1.39/2.0
As of Patch 5, increased support was added for:
Convex C220, running ConvexOS 9.1 with standard C compiler
MacII running A/UX 2.0.1 using gcc-1.39 as C compiler.
DG Aviion running DG/UX 4.3 (thanks to Bob Clark)
Intel 386/486 running Interactive Unix (thanks to Maurizio Davini)
Luna 88K running Mach 2.0 (thanks to Ping-Kang Hsiung & Hideo Noro)
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q2. I have machine X running operating system Y (not listed in A1).
Has anyone ported Khoros to this architecture?
A2. Currently, Khoros is being / has been ported by various people
in the Khoros user community to a variety of architectures,
including the Alliant VFX/2800, Apollo 425T, Convex C220,
DG Aviion, Fujitsu VP2200/10, IBM RS6000, Integraph
Interpro, MacII, Sony 3710, and some 386/486 machines.
At this time, these platforms are not directly supported by the
Khoros group. For more details, you may mail to
danielle@bullwinkle.eece.unm.edu; she is compiling a list of Khoros
ports, and can give you the information that she has so far.
If YOU have done a port of Khoros to machine X running operating
system Y, she would very much appreciate a letter from you,
specifying:
1) your name and place of employment (phone number optional)
2) your return email address
3) which version of Khoros you ported,
4) which machine /operating system you ported to
5) comments you might like to make.
If you *do not* want to be contacted by other Khoros users, simply
say so and your name / email address will not be released.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q3. I want to install KHOROS on an IBM RS/6000 workstation
running under AIX x.x {and am getting error messages from the
C compiler} {and would like more info} {has anybody done this}
{are binaries available}?.
A3. The Khoros group at UNM cannot help you directly with compiler errors
from the RS/6000, as they do not have an RS/6000 to test on. However,
binaries are available from an ftp site in Italy (thanks, Maurizio!)
and advice from Nagarajan Ramesh has proven valuable to many:
(1) Maurizio Davini (mau@ipifidpt.difi.unipi.it)
Has ported Khoros 1.0 P5 to the IBM RS6000 running AIX 3.2;
He has an official ftp site in Pisa, Italy, which includes the
Khoros source & system distribution, plus binaries for the
IBM RS6000 and Interactive Unix 2.2.1, available via anonymous ftp:
address = ipifidpt.difi.unipi.it (131.114.8.130)
ftp = anonymous (ftp)
passwd = user@machine
directory = /pub/khoros
binaries = /pub/khoros/bin/RS6000
The khoros distribution is available also under our gopher server
ipifidpt.difi.unipi.it port 70
(2) Nagarajan Ramesh (nagraj@watson.ibm.com)
Has ported Khoros 1.0 P5 to IBM RS/6000 running AIX 3.1.5.
Has these comments for compiling on the RS6000 with AIX 3.1.5:
"I substituted the bsd compiler for the 'cc' compile command, and
it works. To do this you have to modify your /etc/xlc.cfg file by
including the following stanza - EXACTLY THE WAY IT IS.
bsdcc: use = DEFLT
crt = /lib/crt0.o
mcrt = /lib/mcrt0.o
gcrt = /lib/gcrt0.o
libraries = -lbsd, -lc
proflibs = -L/lib/profiled,-L/usr/lib/profiled
options = -H512,-T512, -qlanglvl=extended, -qnoro,
-D_BSD, -D_NONSTD_TYPES, -D_NO_PROTO,
-D_BSD_INCLUDES, -bnodelcsect,
-U__STR__, -U__MATH__
Then, define a symbollic link from /bin/bsdcc to /bin/xlc.
You also have to change the 'cc' to 'bsdcc' in the ibm.cf file."
(3) In addition, the following people have ported Khoros 1.0 P5
to IBM RS/6000 running AIX 3.2, and have been willing to answer
questions in the past:
* Roque Donizete De Oliveira (oliveria@caen.engin.umich.edu)
* Edmond Mesrobian (edmond@cs.ucla.edu)
* Nick Kisseberth (nkissebe@delphi.beckman.uiuc.edu)
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q4. I want to install KHOROS on a 386/486 machine {and am getting
error messages from the C compiler} {and would like more info}
{has anybody done this} {are binaries available}?.
A4. (1) Scott Wilson (swilson@chama.eece.unm.edu)
Khoros 1.0 P5 to Intel 486 based platform running Interactive
Unix System V/386 Release 3.2, Version 3.0. All software was
stock Interactive except for the use of gcc2.2.2 as a compiler
and f2c to handle the fortran code.
He is providing the Khoros 1.0 P5 on the main Khoros server.
address = pprg.eece.unm.edu (129.24.24.10)
ftp = anonymous (ftp)
passwd = user@machine
directory = /pub/khoros
binaries = /pub/khoros/bin/bin486
libraries = /pub/khoros/bin/lib486
(2) Maurizio Davini (mau@ipifidpt.difi.unipi.it)
Khoros 1.0 to Interactive unix 386 2.2.1, using gcc 1.40 ,f2c
and X386 (the public domain version X11r4 of T.Roell).
He is providing the Khoros 1.0 P5 binaries for Interactive
Unix 2.2.1, plus binaries for IBM RS6000 running AIX 3.2 via
anonymous ftp:
address = ipifidpt.difi.unipi.it (131.114.8.130)
ftp = anonymous (ftp)
passwd = user@machine
directory = /pub/khoros
binaries = /pub/khoros/bin/ISC-2.2.1
/pub/khoros/bin/RS6000
In the directory 386ix, you can also find the X11R4,
fortran compiler, and math library he used to compile Khoros.
For more information, please contact Maurizio.
(3) Dominic Richens (dominic@shamin.genie.uottawa.ca or
richens@panda1.uottawa.ca)
Khoros 1.0 P5 to HP Vectra RS-25C (386 box) running
SCO System V 3.2.2 ODT 1.1.
He is providing the Khoros 1.0 P5 system with shell scripts
and patches needed to build Khoros under SCO ODT 1.1
via anonymous ftp:
address = popeye.genie.uottawa.ca (137.122.20.3)
ftp = anonymous (ftp)
passwd = user@machine
directory = /pub/khoros
(4) Ulrich Breuer (breuer@pool.informatik.rwth-aachen.de)
Used Maurizio Davini's port of Khoros 1.0 P5 as a starting point,
in order to port Khoros 1.0 P5 to 386ix running ISC Version 2.2 with
gcc-2.2.2 and no fortran.
His configuration file, as well as a summary of the changes
necessary for doing the port may be obtained from Danielle Argiro
(danielle@chama.eece.unm.edu), or directly from him.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q5. I want to install Khoros on an HP {9000/s370, s400, s800, or s700}.
{and am getting error messages from the C compiler} {and would like
more info} {has anybody done this} {are binaries available}?.
A5. (answer thanks to Konstantinos Konstaninides, Hewlett-Packard
Laboratories, Palo Alto, CA, kk@hpkronos.hpl.hp.com)
Binaries are not available for the HP, but you should be able to
compile quite easily provided you have the complete C compiler
and a Fortran compiler. To port khoros 1 patch 5 to HP-UX on an
HP9000/s370, s400, s800, or s700, the following steps were taken.
1. Get the Xaw and Xmu libraries and include files
from hpcvaaz.cv.hp.com:~ftp/pub/MitX11R4/libs.s300.Z (or libs.s800.Z
for the snakes) using anonymous ftp.
As an alternative, you can also get the X11R5 libraries from
~ftp/pub/MitX11R5 (same machine). This is probably the preferred
approach if you want to use X11 shared libraries.
Uncompress and untar them into your favorite directory.
NOTE: Don't mix those binaries with HP binaries in /usr/lib/X11R4
and the include files with include files in /usr/include/X11R4.
Unpredictable core dumbs may happen!
Instead use /usr/local/X11R4 or /usr/lib/X11R5 or whatever else
you like.
(Ignore this step if you already have somehow the above
include files and libraries in your system.)
2. Edit src/xvroutines/Lib/xvforms/Imakefile
Remove:
#define UnsharedObjs
UNSHAREDOBJS =\
init.o
and include init.o with the other objects.
3. Edit $KHOROS_HOME/repos/config/imake_conf/hp.cf
and $KHOROS_HOME/repos/config/imake_conf/Lib/hpLib.rules
as shown in the diffs file below
The changes fix the following problems:
a) Strip automatically the binaries (-s)
b) On the s700 solve the "too much defining" error message. (-Wp,..)
c) Include the appropriate Fortran libraries in the linking
of C code, since some khoros libraries use FORTRAN routines too.
d) Eliminate the -Dxxxx in f77 calls (with Shared Libraries).
e) Point to the correct place for the X11 Libraries
f) Install libraries with mode 555 (otherwise code with shared
libraries will not run)
4. Depending on when you got your code you may want
a) get the fixed src/dspl/Lib/ldfilter.c routine
posted in the network. (4/9/92)
b) rm khoros/src/dspl/Lib/poly_yacc.c
(b) solves a linker problem on the s400.
5. Run installit. Everything should compile with no problems.
After the compilation do
- ----------------------
1. edit bin/kinstall_csh, and replace "mail -s" with "mailx -s"
2. You may want to edit bin/prnmanual
(Even if you don't have troff or groff, but you have a postscript
printer, you can still print the man pages. Only set up the printer
command and always accept the default answers. It should print the
existing xxxxx.ps files)
-------------Diffs----------------
*** hp.cf.orig Fri Apr 10 10:44:33 1992
- --- hp.cf Fri Apr 10 10:44:33 1992
***************
*** 7,15 ****
*/
! #define OSName HP-UX 8.05
#define OSMajorVersion 8
! #define OSMinorVersion 5
#define SystemV YES
- --- 7,15 ----
*/
! #define OSName HP-UX 8.07
#define OSMajorVersion 8
! #define OSMinorVersion 7
#define SystemV YES
***************
*** 76,87 ****
#define InstallCmd $(SCRIPTSRC)/bsdinst.sh
#define BaseName /bin/basename
#ifdef hp9000s800
! # define StandardDefines -DSYSV
# define OptimizedCDebugFlags +O1
#else
# if OSMajorVersion == 8
! # define StandardDefines -DSYSV
# else
# define StandardDefines -Wc,-Nd4000,-Ns4300,-Ne700,-Np300 -DSYSV -D_BSD -Drindex=strrchr -Dindex=strchr
# endif
- --- 76,88 ----
#define InstallCmd $(SCRIPTSRC)/bsdinst.sh
#define BaseName /bin/basename
+ #define InstLibFlags -m 0555
#ifdef hp9000s800
! # define StandardDefines -s -Wp,-H512000 -DSYSV
# define OptimizedCDebugFlags +O1
#else
# if OSMajorVersion == 8
! # define StandardDefines -s -DSYSV
# else
# define StandardDefines -Wc,-Nd4000,-Ns4300,-Ne700,-Np300 -DSYSV -D_BSD -Drindex=strrchr -Dindex=strchr
# endif
***************
*** 89,98 ****
#if OSMajorVersion == 8
# if defined (hp9000s300) || defined (hp9000s400)
! # define SysLibs -lBSD -lmalloc -lm -ll
# define ForSysLibs -lFext -lF77 -lI77
# else
! # define SysLibs -lBSD -lmalloc -lm -ll
# define ForSysLibs -lcl -lfsys
# endif
#else
- --- 90,99 ----
#if OSMajorVersion == 8
# if defined (hp9000s300) || defined (hp9000s400)
! # define SysLibs -lBSD -lmalloc -lm -ll -lIO77
# define ForSysLibs -lFext -lF77 -lI77
# else
! # define SysLibs -lBSD -lmalloc -lm -ll -lcl
# define ForSysLibs -lcl -lfsys
# endif
#else
***************
*** 100,106 ****
- --- 101,114 ----
# define ForSysLibs -lFext -lF77 -lI77
#endif
+ #define XLibDir /usr/local/x11r4/lib.s300
+ #define XIncludes -I/usr/local/x11r4
/*
+ #define XLibDir /usr/lib/X11R5
+ #define XIncludes -I/usr/include/X11R5
+ */
+
+ /*
* The Shared libaries for HP may not be complete. We do not
* have an HP. This Lib/hpLib.rules is a guess at how hp
* shared libs should be made. Please mail and changes
***************
*** 108,114 ****
* update for the next version.
*/
! #define HasSharedLibraries NO
#if HasSharedLibraries
# define SharedLibRev 1.1 /* Use Khoros revision number */
- --- 116,122 ----
* update for the next version.
*/
! #define HasSharedLibraries YES
#if HasSharedLibraries
# define SharedLibRev 1.1 /* Use Khoros revision number */
*** Lib/hpLib.rules.or Mon Apr 6 13:38:05 1992
- --- Lib/hpLib.rules Mon Apr 6 13:38:05 1992
***************
*** 73,81 ****
@@\
.f.o: @@\
$(RM) $@ shared/$@ @@\
! $(FC) -c $(SHAREDCODEDEF) $(SHLIBDEF) $(FLIBFLAGS) $*.f @@\
$(MV) $*.o shared/$*.o @@\
! $(FC) -c $(SHLIBDEF) $(FLIBFLAGS) $*.f @@\
@@\
clean:: @@\
-@if [ -d shared ]; then echo " $(RM) shared/?*.o"; \ @@\
- --- 73,81 ----
@@\
.f.o: @@\
$(RM) $@ shared/$@ @@\
! $(FC) -c $(FLIBFLAGS) $*.f @@\
$(MV) $*.o shared/$*.o @@\
! $(FC) -c $(FLIBFLAGS) $*.f @@\
@@\
clean:: @@\
-@if [ -d shared ]; then echo " $(RM) shared/?*.o"; \ @@\
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q6. I want to install Khoros on a Convex, under ConvexOS x.x
{and am getting error messages from the C compiler} {and
would like more info} {has anybody done this} {are binaries available}?.
A6. (answer thanks to Tait Cyrus, CONVEX Computer Corp., Colorado
Springs, CO, cyrus@convex.com)
Binaries for the Convex are not available; however, building
Khoros 1.0 P5 on the Convex is quite easy. The following is a
convex.cf file which may be used for compiling Khoros under
ConvexOS 9.1.
/*
* convex.cf - Provided by W. Tait Cyrus (cyrus@convex.com) April. 22, 1992
* This is a configuration file for a Convex.
* Thanks to Minaz Punjani <cziup09@pluto.ulcc.ac.uk> for verifying under
* ConvexOS 10.0.
*
* Khoros has been successfully compiled using the following:
* ConvexOS 9.1 & 10.0
* C 4.1, 4.3.1, and 4.3.2
* Fortran 6.1 & 7.0 [see note below]
* CXWindows 2.1 & 3.0
*
* SET VERSION NUMBERS BEFORE MAKING MAKEFILES
*/
/*
* Set the major version number of the Fortran compiler you will be using
* in the following #define.
*/
#define Convex_fc_MajorVersion 7
#if Convex_fc_MajorVersion >= 7
# define Convex_fc_lib -llfs
#else
# define Convex_fc_lib
#endif
#define OSName ConvexOS V9.1
#define OSMajorVersion 9
#define OSMinorVersion 1
/*
* Uncommenting for a ConvexOS 10.0 system is not really necessary since
* nowhere in Khoros is a check of OSMajorVersion made for 10. The only check
* is the one below and it just checks against 8.
*
* #define OSName ConvexOS V10.0
* #define OSMajorVersion 10
* #define OSMinorVersion 0
*/
/*
* does your machine support saber C
*/
#define HasSaberC NO /* for machines that have it */
/*
* Do you want to Compile the tiff library and tiff2viff/viff2tiff
* conversion routines? If set to NO, then the tiff library will
* not be compiled and thus no programs will link against that
* library.
*/
#define UseTiff YES
/*
* are you using gcc? if yes then set HasGcc to YES
*/
#define HasGcc NO
#define SystemV NO
#define HasVoidSignalReturn YES
#define StandardDefines -DXAW_BC
#define VersionNumber 2.0
#define HasFortran YES
#define FortranCmd /usr/convex/fc
#define HasPutenv NO
#define HasBsearch YES
#define HasVFork YES
#define HasTempnam NO
#define HasBsdTypes YES
#define HasRandom YES
#define HasDirent NO
#define HasWait3 NO
#if OSMajorVerson == 8
# define OptimizedCDebugFlags -O3
# define InstScriptFlags -m 0755 -g bin
# define InstManFlags -m 0444 -g bin
# define BootstrapCFlags -Dconvex -pcc
# define DefaultCCOptions -O3 -pcc
# define FortranDebugFlags -O3
# define ForSysLibs -lF77 -lI77 -lD77 -lmathC2
#else /* assuming OSMajorVersion > 8 */
# define OptimizedCDebugFlags
# define InstScriptFlags -m 0755
# define InstManFlags -m 0444
# define BootstrapCFlags -Dconvex
# define DefaultCCOptions -O3 -or none -fi
# define FortranFlags -O3 -fi -or none
# define LibraryFCOptions -O3 -fi -or none
# define ForSysLibs -lF77 -lI77 -lD77 -lmathC2 Convex_fc_lib
#endif
#define ReDefFortran NO
#define UNCOMPRESSPATH /usr/local/bin/uncompress
#define UseCCMakeDepend YES
#define LibraryFDebugFlags -pp=fcpp1 -uo -is .
/*
* the following is a list of data transports available for
* use within Khoros:
* UseFile - Standard file system transport
* UseSockets - bsd Sockets
* UseSharedMem - shared memory
* UseSunVirMem - sun virtual memory
* UsePipes - Pipes
* UseStream - Named pipes
* UseSunRPC - Sun's remote procedure call
* UseKTLI - sysV transport layer interface
* UseApolloRPC - Apollo's remote procedure call
*
* Set the data transports that you want to use to YES and
* all others to NO. normally, you should not have to
* modify this list.
*
*/
#define UseFile YES
#define UseSockets NO
#define UseSharedMem NO
#define UseSunVirMem NO
#define UsePipes NO
#define UseStream NO
#define UseSunRPC NO
#define UseKTLI NO
#define UseApolloRPC NO
#define NormalFortranObjectRule() @@\
all:: @@\
$(FC) -il $(FSRCS) @@\
@@\
.f.o: @@\
$(RM) $@ @@\
$(FC) -c $(FLIBFLAGS) $*.f @@\
@@\
clean:: @@\
$(RM) *.fil
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q7. Can I run Khoros on my PC? Is Khoros available for PC's running DOS?
A7a. The three major requirements for Khoros are: X11R4, a UNIX-type
operating system, and lots of space (min. 120-150 Meg). Only if your
PC has these three prerequisites can you consider doing a port of
Khoros to your PC. Successful ports of Khoros have been done for
the Mac II and various 386/486 machines that meet these requirements.
Please see Q4 for more details on ports to the 386/486.
A7b. No, nor are there plans to make Khoros available for PC's
running DOS as of yet. The design changes necessary for
completing such a task would be so extensive as to make the
attempt unworkable at this time.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q8. Is there a port of Khoros for a VMS system?
A8. No. The software depends heavily on system functions that are
unique to Unix-based operating systems.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
================ Compile With Shared Libraries ===============================
Q9. What are shared libraries? Does Khoros work with shared libraries?
What are the advantages/disadvantages of using shared libraries?
Should I compile Khoros with shared libraries?
A9a. Shared libraries are a mechanism implemented by some operating
systems (SUN, HP, DG Aviion, etc) that allow a significant savings
of disk space by allowing programs to link against any necessary
libraries at runtime rather than at compile time. Since the libraries
are not compiled into the program's executable, each program that
is compiled with shared libraries takes up much less space.
A9b. Yes. You can compile Khoros with/for shared libraries.
If you are compiling shared, make sure that your machine.cf
configuration file has the symbol HasSharedLibraries set to YES.
A9c. The advantage, of course, is savings on disk space. The disadvantage
is that because libraries must be linked in at runtime, you will
experience a lag in startup time of programs. The disk space savings,
like amount of the extra time at startup, will vary with machine
architecture, operating system implementation, and other factors.
A9d. That depends on your position with respect to the tradeoffs.
If you are short on disk space, using shared libraries may be the
answer to your problems. If you have plenty of disk space to waste,
you may want to go ahead and compile statically so that programs
run faster.
Some excerpts of mail from Khoros users who have reported disk savings
due to shared libraries follow (thanks, guys, for the info):
"I've just brought Khoros up with shared libraries under
DG/UX 5.4 (DG AViiON). However, the size savings seems quite
a bit less than I was expecting...Anyway, there is a net disk
savings of 22.2MB, some 27MB (from 86MB to 59MB) in bin and about
4.7MB in lib). -- Steve"
"I don't know about the savings, but do know the sizes with SUN
shared libs. (patchlevel 5) Bin: 24Mb Lib: 9.2Mb, with 3.7Mb shared
libs. I recall needing approx. 80-90 Mb for bin without shared libs
(for patch level 2). -- Klamer"
"I got 7 MB of libraries and about 20 MB of executables on a
SPARCstation running {shared libs}. I would have to expect 63 MB of
executables + 21 MB of librares and objects when not using shared
code - it saved about 40 - 50 MB... -- Kritt"
"Here are my numbers for khoros patch 5: bin 9.3 MB, lib 9.1 MB
The lib contains BOTH shared and archive libs. Thus, making khoros
shared gives 9.3 MB bins + 4.5 MB libs = 13.8 MB... Not long ago I
had an unstrip'ed code of patch 4 that took (read my lips) 165 MB!!
-- Peder"
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q10. Why do I get unresolved references when I compile Khoros with
shared libraries on a SUN4?
A10. If you are compiling on a SUN4 under 4.1.1 and have installed
the loader (ld) program patch, or you are compiling on a SUN4
under 4.1.2 you must compile Khoros statically. Make sure
you set HasSharedLibraries to NO in the sun.cf file.
The ld program under 4.1.1 (with the patch) and under 4.1.2
requires that all references in the libraries be resolved. So,
this means that every Khoros routine will need to load against
all the libraries. This is not reasonable for Khoros, and the
size of the shared executables after loading against all the
libraries are not significantly smaller than if they were
loaded statically.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q11. When compiling shared, I get a large set of errors from
the loader listed in my make.World file, as in:
rm -f vadd
cc -o vadd vadd.o -L/home/holst/khoros/lib -L/mnt/elocal/lang/SC1.0
-O -Bdynamic -lghost -lvexpr -lnum_anal -ldspl -lformat
-lgeo_surf -lvipl -lvutils -lvmath -lvrast -lvgparm -lverror
-ltiff -lm -ll -ldl
ld: Undefined symbol
_cg_
_zgedi_
_zgeco_
_zgesl_
_zsvdc_
_ch_
_dgesl_
_dgefa_
_e_wsfe
_pow_ii
_s_wsFe
_s_stop
*** Error code 2
install in ./vipl/arith_binary/vadd done
make: Warning: Target `install' not remade because of errors
A11. This is the behavior of the loader in Sun OS 4.1.2. It
insists on resolving everything in linpack, and since that
version of linpack does not appear to be fully consistent
(i.e. those routines are reference but not defined), you get
these error messages.
To solve the problem, you may:
* use the (pre ld patch) loader of 4.1.1.
suggestion, to use something like:
lrwxrwxrwx 1 root 8 Jun 10 11:04 /usr/bin/ld -> ld.4.1.1
-rwxr-xr-x 1 root 156161 Mar 5 15:46 /usr/bin/ld.4.1.1*
-rwxr-xr-x 1 root 156161 Oct 23 1991 /usr/bin/ld.4.1.2*
so that you can switch between the two loaders easily.
* add stub routines to linpack (like extern void zgeco_() {} )
* in $KHOROS_HOME/repos/config/imake_conf/sun.cf,
change:
# define DefaultCCOptions -Bdynamic
# define LibraryLdOptions -assert pure-text
to:
# define DefaultCCOptions -Bdynamic -Qoption ld -assert -Qoption ld
nodefinitions
# define LibraryLdOptions -assert nodefinitions
If you are compiling on a SUN4 under 4.1.1 and have installed
the loader (ld) program patch, you must either follow the solutions
given above, or compile statically.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q12. I am compiling [some xvroutine] against X11R5 with shared libraries.
The linker produces this error message:
ld: /lib/libXaw.sa.5.0(sharedlib.o): _formWidgetClass: multiply defined
/lib/libXaw.sa.5.0(sharedlib.o): _labelWidgetClass: multiply defined
*** Error code 2
make: Fatal error: Command failed for target `{xvroutine}'
A12. You will need to change Form.c in
$KHOROS_HOME/src/xvroutines/Lib/xvutils.
Try changing line 137 from:
WidgetClass formWidgetClass = (WidgetClass)&formClassRec;
to:
static WidgetClass formWidgetClass = (WidgetClass)&formClassRec;
And, in the file Label.c in $KHOROS_HOME/src/xvroutines/Lib/xvutils,
Try changing line 140 from:
WidgetClass labelWidgetClass = (WidgetClass)&labelClassRec;
to:
static WidgetClass labelWidgetClass = (WidgetClass)&labelClassRec;
Recompile the xvutils library, and recompile the xvroutine.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q13. I am having problems using cantata (or other xvroutine)
after recently compiling on a SUN with shared libraries. I get the
error message:
Warning: Widget class VendorShell version mismatch (recompilation needed):
widget 11004 vs. intrinsics 11003.
Warning: Widget class Form version mismatch (recompilation needed):
widget 11004 vs. intrinsics 11003.
A13. Your LD_LIBRARY_PATH environment variable that you use to compile
your object files with is different than your run time environment.
To get a bit of information about what is going on, do:
% ldd $KHOROS_HOME/bin/{problem program}
If the path printed for Xaw and Xt is different than what is listed
when you do:
% printenv
then this is the problem. To fix it, unset LD_LIBRARY_PATH or set it
to the correct path.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q14. Warpimage {or other xvroutine} did not compile after on a SUN4
architecture with static libraries; in fact, it made the cc compiler
segmentation fault and core dump! What happened?
A14. The problem is that the Makefile that is created for warpimage has
a line that is too long for ld to handle. The solution is to edit
the Makefile and delete these three lines:
$(FILEFORMATLIB) \
$(DSPLLIB) \
$(TIFFLIB)
and change the line
$(VERRORLIB) \
to
$(VERRORLIB)
This causes the cc line to be of a reasonable length, and warpimage
{or other xvroutine} will now compile properly.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q15. Khoros compiled ok under shared libraries. However, when I try to
use the programs, I get messages that say:
lib{something}.so.1 not found
A15. The message implies that your LD_LIBRARY_PATH environment variable
that was used to compile the Khoros object files is different than
your run time environment.
To get a bit of information about what is going on, do:
% ldd $KHOROS_HOME/bin/{problem program}
If the path printed for lib{something} is different than what is
listed when you do:
% printenv
then this is the problem. To fix it, unset LD_LIBRARY_PATH or set
it to the correct path.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
===================== Compiling with X11R5 ================================
Q16. Can I compile Khoros with X11R5?
A16. Yes. See Q12 for the most frequent problems when compiling
Khoros with X11R5.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Q17. I am compiling Khoros with MIT's X11R5. When linking xvroutines
(cantata, editimage, etc), the compiler tells me that
_viewportWidgetClass is multiply defined. What's the problem?
A17. This problem is due to the fact that we have our own bugged fixed
versions of the Viewport widget. We were hoping that R5
would have these fixes so that we could delete them, but unfortunately
this isn't the case. Kim Tang provides these fixes to get around the
problem:
In $KHOROS_HOME/src/xvroutines/cantata/Viewport.c, change line 141 to:
static WidgetClass viewportWidgetClass = (WidgetClass)&viewportClassRec;
Q17b. ld: /lib/libXaw.sa.5.0(sharedlib.o): _formWidgetClass: multiply defined
/lib/libXaw.sa.5.0(sharedlib.o): _labelWidgetClass: multiply defined
*** Error code 2
make: Fatal error: Command failed for target `{xvroutine}'
A17b. see Q13.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
=========== Makefiles, Imakefiles (Compiling New Programs) ===================
Q18. I don't want to compile Khoros source, but I want to compile
my own programs so I need the libraries. How can I obtain the
Khoros libraries?
A18. We distribute libraries for the SUN4, Decmips, and SGI via
anonymous FTP:
USA: ftp pprg.eece.unm.edu (129.24.24.10)
(University of Login: anonymous (or ftp)
New Mexico) Password: user_name@machine
To obtain the libraries, cd to "pub/khoros/bin". You will find
three sub-directories called libsun4, libdecmips and libsgi.
In these sub-directories are the compressed tar files containing
the libraries. Unpack the libraries the same way you would
unpack the binaries. Consult the Khoros installation guide.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q19. I am trying to compile an xvroutine, and when I run make install
I get the error:
installing in ./{xvroutine}...
Make: Don't know how to make {KHOROS_HOME}/lib/libdisplay.a.
Stop.
*** Error code 1
A19. Most likely, you do not have the Khoros libraries that are necessary
to compile spectrum (and any other toolbox you may acquire).
These libraries (*.a) would be located in $KHOROS_HOME/lib if you
had them. If you do not have them, you may either:
(1) ftp them from pprg (see Q11)
- or -
(2) compile the Khoros system (you must have source code for this)
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q20. I want to link a {vroutine/xvroutine} for dbx.
A20. In your Imakefile, add:
CDEBUGFLAGS = -g
% makemake
To remake your Makefile.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q21. I want my {vroutine/xvroutine} to use some specific
include files and special libraries.
A21. Suppose you have additional include files you want (relative to the
program) in "../../include" and an extra library you want to use in
"../../lib/libfubar.a."
So in your Imakefile, you'd add:
EXTRA_INCLUDES = -I../../include
EXTRA_LIBRARIES = ../../lib/libfubar.a
% makemake
To remake your Makefile. You can also use the absolute path, but
this is not a good idea if you have your program on more than one
architectures using NFS, as all the architectures will use the same
Imakefile, but the absolute path on one machine may not be the same
as the absolute path on the second.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q22. Is there a way to get ghostwriter to automatically generate
the Makefile so that it will look for other include directories
and libraries?
A22. (answer thanks to Bradford Castallia, Planetary Image Research Lab,
University of Arizona)
You can specify site-specific libraries that should always be
referenced.
However, for specific cases, modify the {toolbox}.def file (under
$TOOLBOX/repos/config/imake_conf). Edit the lines containing the
definitions of TOOLBOXINCLUDE and TOOLBOX_LIBRARIES, and you may also
want to edit the line defining TOOLBOX_DEP_LIBRARIES to be consistent
with the definition of TOOLBOX_LIBRARIES. For example, I have a
toolbox for applications that access our digital filmwriter which
requires access to a few special include files and libraries, so I have
modified filmwriter.def thus:
TOOLBOXINCLUDE = -I$(TB_NAME)/include \
-I/usr/local/QCR/include \
-I/usr/local/image/include \
-I/usr/local/PIRL
TOOLBOX_LIBRARIES = -lfilmwriter \
-lQCR \
-lImage \
-lPIRL
TOOLBOX_DEP_LIBRARIES = $(LIBDIR)/libfilmwriter.a \
/usr/local/lib/libQCR.a \
/usr/local/lib/libImage.a \
/usr/local/lib/libPIRL.a
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
=================== Compiling with gcc ======================================
Q23. I'm having a problem with gcc:
% gcc test.c -I/usr/local/include -I$KHOROS_HOME/include
In file included from {KHOROS_HOME}/include/vinclude.h:128,
from test.c:3:
{KHOROS_HOME}/include/vdefines.h:219: conflicting types for `malloc'
/usr/local/{...}/include/malloc.h:41: previous declaration of `malloc'
{KHOROS_HOME}/include/vdefines.h:223: conflicting types for `calloc'
/usr/local/{...}/include/malloc.h:39: previous declaration of `calloc'
A23. In the file $KHOROS_HOME/include/vdefines.h,
change the line:
#ifndef AUX
to:
#if !defined(AUX) && !defined(__GNUC__)
Then, in $KHOROS_HOME/src, execute
% make Makefiles
% make install
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q24. I noticed in the make.World file is that a few files are compiled
using 'cc', while some others are compilied using 'gcc'. Is this normal?
Also, there were messages like:
gcc: file path prefix `dynamic' never used
A24. The -Bdynamic flag does not exist for gcc. Use -static for a static
binary compile, as the default is to load dynamically. The -Bdynamic
flag was ignored and not used.
It is normal that some files will be compiled with cc. We use cc to
compile the bootstrap programs such as imake. However, gcc should have
been used for all the rest of the routines.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
=================== Compiling With/Without FORTRAN ==========================
Q25. Do I HAVE to have FORTRAN to compile Khoros? Which Khoros programs
will I miss out on if I don't compile with FORTRAN?
A25. No, you don't have to have FORTRAN to compile Khoros, although there
are some Khoros programs that use it. If you don't compile with
FORTRAN, you will NOT be able to run the following programs, nor will
you be able to make calls to any of their associated library routines:
Program Library Call
------- ------------
* warpimage
* vbilinco (lvbilinco)
* vpolyco (lvpolyco)
* vsvpsf (lvsvpsf)
* vblse (lvblse)
* vfft (lvfft)
* dmusic (ldmusic)
* dminorm (ldminorm)
* dacorr (ldacorr)
* dxcorr (ldxcorr)
* dconvo (ldconvo)
* dfft1d (ldfft1d)
* difft1d (ldifft1d)
* minvert (lminvert)
* msvd (lmsvd)
* meigen (lmeigen)
* mlud (lmlud)
* mlse (lmlse)
* minfo (lminfo)
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q26. How do I compile the Khoros system without FORTRAN?
A26. Look for the line in your configuration (*.cf) file that says,
#define HasFortran YES
Change it to:
#define HasFortran NO
For those compiling on a SUN architecture, note that in the sun.cf
file for Khoros 1.0 Patch 5, there is an INCORRECT comment:
/*
* does your machine have fortran? If not comment the next
* two lines
*/
The comment lies. Do not comment out the lines, simply make
sure that HasFortran is set to 'NO' (not 'no' or 'No').
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q27. I don't have a FORTRAN compiler, but I need the Khoros programs that
use FORTRAN. What can I do?
A27. The public domain "f2c" FORTRAN-to-C converter can be used to produce
C code from the FORTRAN sections of Khoros. The "f2c" program can
be obtained via anonymous ftp from various sites including
pprg.eece.unm.edu (129.24.24.10) in the directory, /pub/dist/f2c, and
research.att.com (192.20.225.2) in the directory, /netlib.
Khoros programs that depend on FORTRAN code that was converted to
C by the f2c program dont't have their results guaranteed by the Khoros
group, however, at least not at this time.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q28. I am writing a {vroutine/xvroutine} in which I need to make a call
from my C code to a FORTRAN subroutine/function. How do I do this?
A28. (1) Declare the FORTRAN subroutine/function, making sure you use an
underscore after the name, as in:
(void) subroutine_();
(type) function_();
(2) Call the subroutine/function, remembering that when you call FORTRAN
from C, you must always pass values by reference (address), as in:
int int_value, *int_array;
(void) subroutine_(&int_value, int_array);
(3) Note that 2D arrays in FORTRAN are stored in the opposite way
from those in C. In C, a 2D array is stored as row by row,
whereas in FORTRAN a 2D array is stored column by column.
(4) Also note that the TRUE and FALSE status values returned by
a FORTRAN program may not be the 1 and 0 that are used by
convention in C.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q29. I am setting up my *.cf configuration file in preparation for compiling
Khoros. How do I find out what libraries the linker expects in order
to link C code against FORTRAN, in order to provide the proper
libraries for the ForSysLibs option?
A29. You can find out what libraries the linker expects by compiling any
available Fortran program with the [-v] option, and looking for the
libraries specified after a [-l] that are NOT used when compiling
C code. Roque Donizete De Oliveria provides the example below, which
he used in getting Khoros to compile under Ultrix 4.2:
% f77 -v machar.F
/lib/cpp -DLANGUAGE_FORTRAN -DMIPSEL -Dunix -Dmips -Dhost_mips
machar.F > machar.i
/usr/lib/cmplrs/fort/decfort -o /tmp/forAAAa01710.o machar.i
/usr/bin/cc -v /tmp/forAAAa01710.o -nocount -lUfor -lfor -lutil
-li -lot s -lm
/usr/lib/cmplrs/cc/ld -G 8 -g0 -nocount /usr/lib/cmplrs/cc/crt0.o
-count /tmp/forAAAa01710.o -nocount -lUfor -lfor -lutil -li
-lots -lm -nocount -lc
0.2u 1.7s 0:09 21% 84+285k 333+63io 17pf+0w
In this case, therefore, you would specify in the ultrix.cf file:
ForSysLibs: -lUfor -lfor -lutil -li -lots
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
=================== Miscellaneous ============================================
Q30. I seem to be having some trouble getting Khoros working on our Sun 3.
I have tried executing {cantata, editimage, etc} {journal playbacks},
but I keep getting the error "ld.so: libXaw.so.4: not found".
A30. (answer thanks to Mike Gross, Physics Board, Univ of California)
Your problem is that you have to run ldconfig to tell your system where
your shared libraries are. The syntax is:
ldconfig <directory> [<directory>] [<directory>] ...
where each directory is a possible location for a *.so.* file. You
may have to use find to figure out where all the libraries are. Try
this out, and if it works, put the ldconfig command in /etc/rc.local,
so that you won't lose it next time your system crashes.
An alternative is to compile khoros using static libraries, but this
will make your executables much larger.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q31. Since the docs say that RPC isn't implemented yet, I defined
UseSunRPC as NO. Compiling phantomd results in the following:
ld: Undefined
_sunrpc_tempnam
_sunrpc_gethostname
A31. Suggestions:
1) make sure that the SunRPC variable in
repos/config/imake_conf/sun.cf is set to 'NO' rather than 'no'.
2) cd into src and run the "installit" script again.
- or -
2) cd into src/Lib/vgparm and run:
% make Makefile
% make install
You should see it recompile with a set of defines specified on
the compilation command. Make sure that -DKSUNRPC option is *not*
defined. This is what's trying to pull in the non-existent
Sun RPC transport.
3) If you are not using shared libraries, then change directories
to $KHOROS_HOME/src and run:
% make install
If you are using shared libraries, simply rerunning the phantomd
should work.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q32. On Sun3, OS 4.1.1, a segmentation fault results when cantata is run.
The problem is that the bug is caused in the vgparm and vutils
library, not in the cantata program code.
In the file $KHOROS_HOME/src/Lib/vgparm/listfile.c there is a bug.
Make the following changes to this file
at line 100 change:
char character, *fullpath, entry[LENGTH], **list;
to:
char character[2], *fullpath, entry[LENGTH], **list;
and line 144 change:
if ((void) fscanf(file, " %[#]", &character) == 1)
to:
if ((void) fscanf(file, " %[#]", character) == 1)
and line 157 change:
else if ((void)fscanf(file, "%[/]%[*]", &character, &character) == 2)
to:
else if ((void) fscanf(file, "%[/]%[*]", character, character) == 2)
Then in the file $KHOROS_HOME/src/Lib/vutils/readascii.c some
changes need to be made.
at line 99 change:
char dummy[512], character;
to:
char dummy[512], character[2];
and line 128 change:
if ((void) fscanf(file, "%[#]", &character) == 1)
to:
if ((void) fscanf(file, "%[#]", character) == 1)
and line 139 change:
else if ((void)fscanf(file, "%[/]%[*]", &character, &character) == 2)
to:
else if ((void)fscanf(file, "%[/]%[*]", character, character) == 2)
there also seems to be a problem caused by the optimizer
using -O on sun3. It is necessary to recompile the system using -01
which is defined as follows in your sun.cf file:
#define HaveSunPatchedLd NO
#define HasGcc NO
#define DefaultCDebugFlags -O1 /* for programs */
#define LibraryCDebugFlags -O1 /* for libraries */
Note that a comment in sun.cf has a typing error. The correct
flag is -O1 (minus oh one) and not -01 (minus zero one).
Then change directory to $KHOROS_HOME/src, run "make allclean"
and then the "installit".
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q33. During the compile of Khoros, I get this error message:
/: write failed, file system is full
compiler(iropt) error: write_irfile: No space left on device
A33. This error is becuase you have run out of disk space in /tmp.
By default the C compilier uses /tmp as the place to store
intermediate files. To fix this, set the environment variable
TMPDIR to a partition with more disk space, as in:
% setenv TMPDIR /large_tmp_dir
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q34. I am trying to compile a {toolbox, new program, etc}, but "make"
keeps giving me error messages that say:
make: Fatal error:
Don't know how to make target `{KHOROS_HOME}/lib/lib{something}.a
A34. It is likely that you simply don't have the Khoros libraries installed
on your system. Look and see if there is a {KHOROS_HOME}/lib
directory, which contains a large variety of files ending in ".a".
If this directory is missing, whoever installed Khoros probably got
just system & binaries. If you want to compile anything, though,
you must have the Khoros libraries installed properly in
$KHOROS_HOME/lib. You may obtain the Khoros libraries in one of
two ways:
(1) for SUN4, SGI, DECMIPS, and 486 architectures, the libraries can
be ftp'd from pprg.eece.unm.edu, in /pub/khoros/bin. Put
the *.a's in $KHOROS_HOME/lib, and you will be able to compile.
(2) you may acquire Khoros source code from pprg.eece.unm.edu, in
/pub/khoros/src, and compile the Khoros system according to the
installation guide. The Khoros libraries will be compiled as
part of the entire Khoros installation process.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q35. Where in the Khoros Manual is the documentation relating to
compilation/installation of programs in Khoros?
A35. The installation guide for the Khoros system as a whole is
available via anonymous ftp from pprg.eece.unm.edu, in the
file /pub/khoros/release/install.ftp. This is also Chapter 10
of the Khoros Programmer's Manual.
For becoming familiar with the source configuration of Khoros,
the imake system, the tools available for compiling Khoros programs,
adding new routines to existing libraries, creating new libraries,
creating new programs, and maintaining Khoros on multiple architectures,
you want Chapter 9 of the Khoros Programmer's Manual.
Either of these chapters may be printed using the "prnmanual" program.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q36. How does one selectively fix a program and recompile it without doing
the whole installation process again?
A36. The process will differ if the fix is to a library on which the
program depends, or to the program itself.
Case 1: Fix is to a library on which the program depends.
a1) In the case that the fix involves adding a new file to the
library, copy the new file to the library. Then execute "imkmf",
followed by "make Makefile".
a2) In the case that the fix involves over-writing an old file with a
new, bug-fixed file, it is generally wise to make a backup copy
of the old file before you over-write it.
b) Now, execute, "make depend", followed by "make install".
This recompiles the library.
c) Finally, you must recompile the program(s) which depend on the
library.
In some cases, there will be only one program that is affected.
For example, if the fix was in the IPL library, the DSPL library,
or the File Formats library, it is likely that the fix will only
affect one program. Find the directory in which the program is
located, and recompile it using, "make install".
In the case of the xvdisplay, xvforms, xvgraphics, and xvutils
libraries, all xvroutines will be affected.
Go to $KHOROS_HOME/src/xvroutines and execute, "make install".
In other cases, the fix to the library may affect every program in
the Khoros system. This will be the case with fixes to the
verror, vexpr, vgparm, vmath, vrast, and vutils libraries.
After making a fix to one of these libraries, it is best to go to
$KHOROS_HOME/src, and do "installit" again.
Case 2: the fix is to the program itself
In this case, simply find the program in the KHOROS_HOME source tree.
a1) In the case that the fix involves adding a new file to the
program, copy the new file to the program directory.
Then execute "imkmf", followed by "make Makefile".
a2) In the case that the fix involves over-writing an old file with a
new, bug-fixed file, it is generally wise to make a backup copy
of the old file before you over-write it.
a) Now, execute, "make depend", followed by "make install".
This recompiles and installs the program.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ ~
Q37. When I try to compile dzresp, dfilter, mat2viff, etc., I get
unresolved symbols for _dspl_parse, _format_parse, and _vexpr_parse.
Where do I find these routines?
A37. The problem you are experiencing is the result of using GNU's version
of the program 'sed'. What you need to do is change your path so
that /bin/sed or /usr/bin/sed are used and then do the following:
cd $KHOROS_HOME/src/Lib/vexpr
make clean
cd $KHOROS_HOME/src/dspl/Lib
make clean
cd $KHOROS_HOME/src/file_formats/Lib
make clean
cd $KHOROS_HOME/src
make install