Discussion:
[Mingw-users] newbie problem with make and drand48
Lisa Crozier
2006-05-02 16:24:06 UTC
Permalink
Hello! This is a very basic question but I am extremely desperate for help.
I am very new not only to MinGW but to programming in general. I am using
the package download MinGW-3.1.0-1, which has gcc-3.4.2-20040916-1, on
Windows XP, with GNU's Emacs for windows as my text editor.



I am trying to get drand48() to work, and I found a thread on this page with
instructions (copied below). I got as far as downloading all the files, but
can't a) compile them manually without changing the code or b) compile with
the Makefile given. And c) even if I could compile them, I suspect they
might not go into the right directory. I'll describe these problems one at a
time.



a) Compiling them manually gives me lots of declaration and parse
error messages (listed below). Are these really mistakes in the code, or am
I missing something?

b) This turns out to be more general problem with make. When I type
'make', even for a more basic example of hello world, I get the error
message "'make' is not recognized as an internal or external command,
operable program or batch file. Compilation exited abnormally with code 1 at
Mon May 01 15:27:05." This isn't an Emacs problem, because it also happens
from the command line. Can anyone point me to instructions on how to get
make to work?

c) Should I put these files straight into the "include" subdirectory
in my MinGW directory, or can they be contained within several layers of
subfolders (which is how they downloaded automatically)?



And finally, although this may be the wrong place to ask this question, I
would also love to know how to get Emacs to find my compiler (g++) without
the files I'm working on having to be in the raw compiler directory. Would
Makefiles solve this problem, if I could get them to work?



Many thanks to anyone who can help!!!

Lisa





Previous thread:

Hello!
Subject: [Mingw-users] Newbie question -- Random Function? erf
function?
Just trying to migrate a chunk of C code from Irix cc to MinGW -- I
have been using drand48 and erf to get random numbers and error
function but I can't find these in the libraries. Should I start
typing code copied from Numerical Recipes (in C) , or is there a
particular library that I can obtain and use for these functions?
maybe even a better one :-? Thanks.
Robert
As "g" said, glibc contains these functions. They are on NEWLIB too (it

contains a directory called libc/). This is a GPL library. Read the

license and see if it fits your needs. If .TRUE., download NEWLIB and

use the following procedure to obtain the functions you need.



1. Compile your program

2. Search on the newlib source tree the "missing links"

3. Add the necesary source files to your newlib-subset tree

4. GOTO 1 :-)



Here is what is necesary to obtain a library with some random functions

not defined in MSVCRT (I used this library to port some linux programs

to Win32):



Files you need:



./include/machine/ieeefp.h

./include/machine/types.h

./include/sys/_types.h

./include/sys/config.h

./include/sys/reent.h

./include/_ansi.h

./include/alloca.h

./include/math.h

./include/rand48.h

./include/reent.h

./include/stdlib.h

./src/erand48.c

./src/impure.c

./src/lrand48.c

./src/rand48.c

./src/srand48.c

./Makefile /* see below */
BEGIN Makefile <<
CC = gcc

INCLUDE = -I./include

CFLAGS = -s -O2 -mpentiumpro -Wall -W $(INCLUDE)



SRC = lrand48 erand48 srand48 rand48 impure

SRC := $(addprefix src/,$(addsuffix .c, $(SRC)))

OBJ := $(SRC:.c=.o)

all: libnewlib.a



libnewlib.a: $(OBJ)
END Makefile
BEGIN newlib.def <<
_lrand48_r

lrand48

_srand48_r

srand48

__dorand48

_impure_ptr

_erand48_r

erand48
END newlib.def <<
drand48() and erf() are on NEWLIB too. Copy the necesary files to the

newlib-subset source tree, add the basename of the file to the

Makefile"s SRC variable and give it a try.



Hope it helps!

Francisco



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

Compiling Error Messages:



g++ lrand48.c erand48.c srand48.c drand48.c rand48.c impure.c -o libnewlib

In file included from lrand48.c:14:

rand48.h:20: `__dorand48' was not declared in this scope

rand48.h:20: parse error before `,' token

rand48.h:20: warning: `_EXFUN' initialized and declared `extern'

rand48.h:20: variable or field `_EXFUN' declared void

rand48.h:20: initializer list being treated as compound expression

lrand48.c:17: `_lrand48_r' was not declared in this scope

lrand48.c:17: `r' was not declared in this scope

lrand48.c:18: parse error before `*' token

lrand48.c: In function `long int _DEFUN(...)':

lrand48.c:20: `r' undeclared (first use this function)

lrand48.c:20: (Each undeclared identifier is reported only once for each

function it appears in.)

lrand48.c:20: `__dorand48' undeclared (first use this function)

lrand48.c: At global scope:

lrand48.c:27: `lrand48' was not declared in this scope

lrand48.c:28: syntax error before `{' token

In file included from erand48.c:14:

rand48.h:20: `__dorand48' was not declared in this scope

rand48.h:20: parse error before `,' token

rand48.h:20: warning: `_EXFUN' initialized and declared `extern'

rand48.h:20: variable or field `_EXFUN' declared void

rand48.h:20: initializer list being treated as compound expression

erand48.c:17: `_erand48_r' was not declared in this scope

erand48.c:17: `r' was not declared in this scope

erand48.c:17: `xseed' was not declared in this scope

erand48.c:18: parse error before `*' token

erand48.c: In function `double _DEFUN(...)':

erand48.c:21: `r' undeclared (first use this function)

erand48.c:21: (Each undeclared identifier is reported only once for each

function it appears in.)

erand48.c:21: `xseed' undeclared (first use this function)

erand48.c:21: `__dorand48' undeclared (first use this function)

erand48.c: At global scope:

erand48.c:29: `erand48' was not declared in this scope

erand48.c:30: parse error before `short'

erand48.c: In function `double _DEFUN(...)':

erand48.c:31: redefinition of `double _DEFUN(...)'

erand48.c:20: `double _DEFUN(...)' previously defined here

erand48.c:31: redefinition of `double _DEFUN(...)'

erand48.c:20: `double _DEFUN(...)' previously defined here

erand48.c:32: `_REENT' undeclared (first use this function)

erand48.c:32: `_erand48_r' undeclared (first use this function)

In file included from srand48.c:14:

rand48.h:20: `__dorand48' was not declared in this scope

rand48.h:20: parse error before `,' token

rand48.h:20: warning: `_EXFUN' initialized and declared `extern'

rand48.h:20: variable or field `_EXFUN' declared void

rand48.h:20: initializer list being treated as compound expression

srand48.c:17: `_srand48_r' was not declared in this scope

srand48.c:17: `r' was not declared in this scope

srand48.c:17: `seed' was not declared in this scope

srand48.c:18: parse error before `*' token

srand48.c:22: parse error before `->' token

srand48.c:23: parse error before `->' token

srand48.c:24: parse error before `->' token

srand48.c:25: parse error before `->' token

srand48.c:26: parse error before `->' token

srand48.c:27: parse error before `->' token

srand48.c:32: `srand48' was not declared in this scope

srand48.c:32: `seed' was not declared in this scope

srand48.c:33: parse error before `)' token

In file included from drand48.c:14:

rand48.h:20: `__dorand48' was not declared in this scope

rand48.h:20: parse error before `,' token

rand48.h:20: warning: `_EXFUN' initialized and declared `extern'

rand48.h:20: variable or field `_EXFUN' declared void

rand48.h:20: initializer list being treated as compound expression

drand48.c:17: `_drand48_r' was not declared in this scope

drand48.c:17: `r' was not declared in this scope

drand48.c:18: parse error before `*' token

drand48.c: In function `double _DEFUN(...)':

drand48.c:20: `r' undeclared (first use this function)

drand48.c:20: (Each undeclared identifier is reported only once for each

function it appears in.)

drand48.c:20: `_erand48_r' undeclared (first use this function)

drand48.c: At global scope:

drand48.c:25: `drand48' was not declared in this scope

drand48.c:26: syntax error before `{' token

In file included from rand48.c:156:

rand48.h:20: `__dorand48' was not declared in this scope

rand48.h:20: parse error before `,' token

rand48.h:20: warning: `_EXFUN' initialized and declared `extern'

rand48.h:20: variable or field `_EXFUN' declared void

rand48.h:20: initializer list being treated as compound expression

rand48.c:159: `__dorand48' was not declared in this scope

rand48.c:159: `r' was not declared in this scope

rand48.c:159: `xseed' was not declared in this scope

rand48.c:160: parse error before `*' token

rand48.c: In function `void _DEFUN(...)':

rand48.c:166: `r' undeclared (first use this function)

rand48.c:166: (Each undeclared identifier is reported only once for each

function it appears in.)

rand48.c:166: `xseed' undeclared (first use this function)

g++: impure.c: No such file or directory



Compilation exited abnormally with code 1 at Mon May 01 16:31:14
Greg Chicares
2006-05-02 17:57:04 UTC
Permalink
[Sending plain text instead of html would make it much easier to reply.
And please post to
mingw-***@lists.sourceforge.net
instead of
mingw-***@lists.sf.net
so that people who "reply to all" don't accidentally send duplicates.
Thanks.]
Post by Lisa Crozier
I am trying to get drand48() to work, and I found a thread on this page
with instructions (copied below). I got as far as downloading all the
files, but can’t a) compile them manually without changing the code or
b) compile with the Makefile given. And c) even if I could compile
them, I suspect they might not go into the right directory. I’ll
describe these problems one at a time.
First of all, where did you find that advice? I googled for both
the first line
"Just trying to migrate a chunk of C code from Irix cc to MinGW"
and the Subject
"Newbie question" "Random Function" erf
but couldn't find the original reference. The header
Post by Lisa Crozier
Subject: [Mingw-users] Newbie question -- Random Function? erf
makes it look like it was posted here, but I can't find it in the
mingw archives either. I would like to think that one of us would
have commented on it: there has to be a better way of generating
random numbers than trying to build a subset of newlib.

What are you trying to accomplish: why do you want drand48()? Would
any random-number generator suit your purposes? Do you need one
that's better than what the C standard library already provides?

If you're writing C++, then prefer the random-number library at
boost.org . If you're writing C, then look for code on the web.
Here's an example from a careful author
http://www-cs-staff.stanford.edu/~knuth/programs/rng-double.c
which compiles fine with this simple command:
gcc rng-double.c
If you want to port *nix applications without considering issues
like this, try cygwin, which uses newlib.
Post by Lisa Crozier
a) Compiling them manually gives me lots of declaration and parse
error messages (listed below). Are these really mistakes in the code,
or am I missing something?
Hard to guess without being able to look at the code. Presumably
it's either nonportable or misconfigured.
Post by Lisa Crozier
b) This turns out to be more general problem with make. When I
type ‘make’, even for a more basic example of hello world, I get the
error message “'make' is not recognized as an internal or external
command, operable program or batch file. Compilation exited abnormally
with code 1 at Mon May 01 15:27:05.” This isn’t an Emacs problem,
because it also happens from the command line. Can anyone point me to
instructions on how to get make to work?
For that to work, 'make' must be in a directory on your PATH.
Post by Lisa Crozier
c) Should I put these files straight into the “include”
subdirectory in my MinGW directory, or can they be contained within
several layers of subfolders (which is how they downloaded automatically)?
If you copy files like
Post by Lisa Crozier
./include/math.h
into your MinGW directory, that'll probably ruin the installation
so that simple things will fail in astonishing ways. Prefer to keep
them in a different directory altogether.

Loading...