help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C/C++ using octave


From: viveks
Subject: Re: C/C++ using octave
Date: Tue, 18 Apr 2000 13:01:31 +0530 (IST)

Hello:

I am trying to get used to liboctave and related stuff in order to use the
octave class facilties. I too tried the compile code test1.cc (shown at
the end of the mail) as

gcc test1.cc -L/usr/lib/octave -loctave -lcruft -lkpathsea -lreadline -lg2c

I get the following error:

/usr/lib/octave/liboctave.so: undefined reference to `kpse_clear_dir_cache'
collect2: ld returned 1 exit status

Apparently, I am asked to link with some additional library. Could someone
help me identify that? I am on a RedHat Linux 6.0 running octave 2.0.14.

On 22 Feb 2000 John W. Eaton wrote:

> But you may need other things that are referenced by liboctave and
> libcruft, such as the Fortran libraries (system dependent, but the
> list appears in the generated mkoctfile script) readline, kpathsearch,
> and the dynamic linking library.

In the "mkoctfile" script, I could not find any "system dependent list" of
libraries as siggested here. ("mkoctfile" with me was the one I got in the
rpm package for octave 2.0.14. I don't know how to generate or probably
don't have 'generated mkoctfile'. I have appened mkoctfile too.)

Best regards,

Vivek...
--------------------------------------------------------
Here is the code test1.cc taken from the archive:

> | ----- test1.cc ------
> | #include <octave/oct.h>
> |
> | main(){
> |  Matrix A;
> | }
> | ---------------------

### ------------- MKOCTFILE AVAILABLE WITH ME IS
#                 REPRODUCED BELOW -----------------
#! /bin/sh
#
# mkoctfile -- create a .oct file suitable for dynamic linking by
# Octave.

# Exit immediately on any error.

set -e

# Default values for these variables are filled in when Octave is
# compiled. 

: ${CPPFLAGS=""}
: ${INCFLAGS="-I/usr/include -I/usr/include/octave-2.0.14"}
: ${F77="g77"}
: ${FFLAGS="-O"}
: ${FPICFLAG="-fPIC"}
: ${CC="gcc"}
: ${CFLAGS="-DHAVE_CONFIG_H -mieee-fp -O2"}
: ${CPICFLAG="-fPIC"}
: ${CXX="c++"}
: ${CXXFLAGS="-O2"}
: ${CXXPICFLAG="-fPIC"}
: ${XTRA_CFLAGS="-mieee-fp -fno-rtti -fno-exceptions -fno-implicit-templates"}
: ${XTRA_CXXFLAGS="-mieee-fp -fno-rtti -fno-exceptions -fno-implicit-templates"}

: ${SH_LD="c++"}
: ${SH_LDFLAGS="-shared"}

: ${ALL_FFLAGS="$FFLAGS"}

: ${ALL_CFLAGS="$INCFLAGS $XTRA_CFLAGS $CFLAGS"}

: ${ALL_CXXFLAGS="$INCFLAGS $XTRA_CXXFLAGS $CXXFLAGS"}

# Local variables.

usage_msg="usage: mkoctfile [options] file ..."

cfiles=
ccfiles=
f77files=
objfiles=
octfiles=
octfile=
incflags=
defs=
ldflags=
dbg=:
strip=false

if [ $# -eq 0 ]; then
  echo $usage_msg
  exit 1;
fi

while [ $# -gt 0 ]; do
  file=
  case "$1" in
    *.c)
      file=$1
      cfiles="$cfiles $file"
    ;;
    *.cc | *.C | *.cpp)
      file=$1
      ccfiles="$ccfiles $file"
    ;;
    *.f | *.F)
      file=$1
      f77files="$f77files $file"
    ;;
    *.o)
      file=$1
      objfiles="$objfiles $file"
    ;;
    -d | --debug | -v | --verbose)
      dbg=echo
    ;;
    -h | -\? | --help)
      echo $usage_msg
      cat << EOF

Options:

  -h, -?, --help          Print this message.
  -IDIR                   Add -IDIR to compile commands.
  -DDEF                   Add -DDEF to compile commands.
  -lLIB                   Add library LIB to link command.
  -LDIR                   Add -LDIR to link command.
  -o FILE, --output FILE  Output file name.  Default extension is .oct.
  -s, --strip             Strip output file.
  -v, --verbose           Echo commands as they are executed.

  FILE                    Compile or link FILE.  Recognized file types are:

                            .c    C source
                            .cc   C++ source
                            .C    C++ source
                            .cpp  C++ source
                            .f    Fortran source
                            .F    Fortran source
                            .o    object file

EOF
      exit 0
    ;;
    -I*)
      incflags="$incflags $1"
    ;;
    -D*)
      defs="$defs $1"
    ;;
    -[lL]*)
      ldflags="$ldflags $1"
    ;;
    -o | --output)
      shift
      if [ $# -gt 0 ]; then
        octfile=`echo $1 | sed 's,\.[^.]*$,,'`.oct
      else
        echo "mkoctfile: output file name missing"
      fi
    ;;
    -s | --strip)
      strip=true
    ;;
    *)
      echo "mkoctfile: unrecognized argument $1"
      exit 1
    ;;
  esac
  if [ -n "$file" ]; then
    if [ -z "$octfile" ]; then
      octfile=`echo $file | sed 's,\.[^.]*$,,'`.oct
    fi
  fi
  shift
done

# Compile Fortran, C, and C++ files.  Add the name of each object file
# that is produced to the overall list of object files.

if [ -n "$f77files" ]; then
  for f in $f77files; do
    case $f in
      *.f)
        b=`echo $f | sed 's,\.f$,,'`
      ;;
      *.F)
        b=`echo $f | sed 's,\.F$,,'`
      ;;
    esac
    o=$b.o
    objfiles="$objfiles $o"
    $dbg $F77 -c $FPICFLAG $ALL_FFLAGS $f -o $o
    eval $F77 -c $FPICFLAG $ALL_FFLAGS $f -o $o
  done
fi

if [ -n "$cfiles" ]; then
  for f in $cfiles; do
    b=`echo $f | sed 's,\.c$,,'`
    o=$b.o
    objfiles="$objfiles $o"
    $dbg $CC -c $CPPFLAGS $CPICFLAG $ALL_CFLAGS $incflags $defs $f -o $o
    eval $CC -c $CPPFLAGS $CPICFLAG $ALL_CFLAGS $incflags $defs $f -o $o
  done
fi

if [ -n "$ccfiles" ]; then
  for f in $ccfiles; do
    case $f in
      *.cc)
        b=`echo $f | sed 's,\.cc$,,'`
      ;;
      *.C)
        b=`echo $f | sed 's,\.C$,,'`
      ;;
      *.cpp)
        b=`echo $f | sed 's,\.cpp$,,'`
      ;;
    esac
    o=$b.o
    objfiles="$objfiles $o"
    $dbg $CXX -c $CPPFLAGS $CXXPICFLAG $ALL_CXXFLAGS $incflags $defs $f -o $o
    eval $CXX -c $CPPFLAGS $CXXPICFLAG $ALL_CXXFLAGS $incflags $defs $f -o $o
  done
fi

# Link all the object files.

$dbg $SH_LD $SH_LDFLAGS -o $octfile $objfiles $ldflags
eval $SH_LD $SH_LDFLAGS -o $octfile $objfiles $ldflags

# Maybe strip it.

if $strip; then
  $dbg strip $octfile
  eval strip $octfile
fi

exit 0
### ------------- END OF MKOCTFILE -----------------





-----------------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.che.wisc.edu/octave/octave.html
How to fund new projects:  http://www.che.wisc.edu/octave/funding.html
Subscription information:  http://www.che.wisc.edu/octave/archive.html
-----------------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]