help-gplusplus
[Top][All Lists]
Advanced

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

damned linker wont eat my function 'main' ! :-(


From: Michael Shestero
Subject: damned linker wont eat my function 'main' ! :-(
Date: Wed, 21 Apr 2004 01:08:57 -0700

FreeBSD 4.0, gcc 2.95.x

mybsd# make
c++  -I/usr/X11R6/include/ -O -c lispdemo.cpp
In file included from memman.h:24,
                 from lispcore.h:4,
                 from lispdemo.cpp:3:
memory.h:1: warning: `#pragma once' is obsolete
lispdemo.cpp: In function `class Reference gl_line(MemoryManager &,
Reference)':
lispdemo.cpp:58: warning: `double' used for argument 1 of `Line(int, int,
int, int)'
lispdemo.cpp:58: warning: `double' used for argument 2 of `Line(int, int,
int, int)'
lispdemo.cpp:58: warning: `double' used for argument 3 of `Line(int, int,
int, int)'
lispdemo.cpp:58: warning: `double' used for argument 4 of `Line(int, int,
int, int)'
g++ -o lispdemo   -lm -L/usr/X11R6/lib -lX11
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x79): undefined reference to `main'
*** Error code 1
:-((

Here is my Makefile:
##############################################################
# Makefile voor de grafische routine voorbeeld programma's
#
# de opdracht `make all' compileert en linkt alle programma's.
##############################################################


### Compiler en linker flags ####
CFLAGS =  -I/usr/X11R6/include/ -O

### systemen met dynamische link:

LDFLAGS = -lm -L/usr/X11R6/lib -lX11

### systemen zonder dynamische link:

# LDFLAGS = -lm -lX11

### haal '#' weg om op b.v. Linux of AIX machine te compileren.

CC = gcc
CPP = g++
#############################################################
#IMPORTANT!!! The following environment variable must be set#
#for demo's to work with dynamic libraries:                 #
#                                                           #
#     LD_LIBRARY_PATH = ;/usr/local/X11/lib                 #
#           #
#On some systems this will be:                              #
#                                                           #
#     LD_LIBRARY_PATH = ;/usr/X11/lib       #
#                                                           #
#############################################################

all: lispdemo

lispdemo: lispdemo.o graphics.o symbcell.o ufuncell.o funccell.o lispcore.o
listcell.o memman.o parser.o refer.o bfuncell.o
 $(CPP) -o lispdemo  $^ $(LDFLAGS)

%.o:%.cpp
 $(CPP) -o $@ -c $^ $(CFLAGS)

%.o:%.c
 $(CC) -o $@ -c $^ $(CFLAGS)

clear:
 rm *.o
 rm -f *.exe

----------------------------
All sources have .cpp extention and are C++ programms.
Here is the "main" source file:

// main file
#include "graphics.h"
#include "lispcore.h"
#include "parser.h"
#include <stdio.h>

#define EvalArgs args=MemManager.EvalListArgs(args);
#define arg(n)  (MemManager.nth(n, args))

int gl_MyDrawProc (Display*, Drawable, GC);
char *gl_lspfile; // lisp source file for store

LISPFUNC (gl_color);
LISPFUNC (gl_line);

int main(int argc, char* argv[])
{
  if (argc!=2)
  {
   perror("lispdemo need the parameter: lisp-file name");
   return 1;
  }
  gl_lspfile = argv[1];

  DrawProc = gl_MyDrawProc;
  Graphics (450, 450, "LISP Demo: graphics board");

  return 0;
}

int gl_MyDrawProc (Display* disp, Drawable pm, GC gc)
{
  PutText (5, 10, gl_lspfile);

  LispCore* m = new LispCore();
  m->AddBuildInFunc("line", 4, &gl_line);
  m->AddBuildInFunc("color",1, &gl_color);

  m->Eval( Parser(m).Load( gl_lspfile ) );

  delete m;

  return DONE;
}

LISPFUNC(gl_line)
{
        EvalArgs;
        int err = 0;

  double x1 = MemManager.GiveMeDouble( arg(0), "line: 1st", &err);
  double y1 = MemManager.GiveMeDouble( arg(1), "line: 2nd", &err);
        double x2 = MemManager.GiveMeDouble( arg(2), "line: 3rd", &err);
        double y2 = MemManager.GiveMeDouble( arg(3), "line: 4th", &err);

        if (!err)
        {
                Line(x1,y1,x2,y2);
                return MemManager.T();
        }
        else    return MemManager.NIL();
}

LISPFUNC (gl_color)
{
        EvalArgs;
        int err = 0;

        double c = MemManager.GiveMeDouble( arg(0), "color:", &err);
        if (!err)
        {
    // XSetForeground(display, gc, (long int c));

                return MemManager.T();
        }
        else    return MemManager.NIL();
}
---------------------
LISPFUNC is a macro.

Any ideas??

Michael Shestero





reply via email to

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