c++ - main.c:(.text+0x30): undefined reference to `reciprocal' -
c++ - main.c:(.text+0x30): undefined reference to `reciprocal' -
i trying first programme of advance linux programming. other guys felt problem reading thread not helping me. tried methods problem still there. please help me.
here main.c
#include <stdio.h> #include "reciprocal.hpp" int main(int argc, char const *argv[]) { int i; = atoi(argv[1]); printf("the reciprocal of %d %g\n", i, reciprocal(i)); homecoming 0; } listing reciprocal.cpp
#include <cassert> #include "reciprocal.hpp" using namespace std; double reciprocal(int i) { //i should not 0 assert(i != 0); homecoming 1.0/i; } listing reciprocal.hpp
#ifdef _cplusplus extern "c" { #endif extern double reciprocal (int i); #ifdef _cplusplus } #endif listing makefile:
reciprocal: main.o reciprocal.o g++ $(cflags) -o reciprocal main.o reciprocal.o main.o: main.c reciprocal.hpp gcc $(cflags) -c main.c -i ../include reciprocal.o: reciprocal.cpp reciprocal.hpp g++ $(cflags) -c reciprocal.cpp -i ../include clean: rm -f *.o reciprocal the error is:
rajat$ create gcc -c main.c -i ../include g++ -c reciprocal.cpp -i ../include g++ -o reciprocal main.o reciprocal.o main.o: in function `main': main.c:(.text+0x30): undefined reference `reciprocal' collect2: error: ld returned 1 exit status make: *** [reciprocal] error 1
you should have __cplusplus (the proper macro definition) not _cplusplus in macro.
how debug: find undefined reciprocal in main.o:
nm main.o | grep reciprocal u reciprocal and in reciprocal.o:
with __cplusplus:
$ nm reciprocal.o | grep reciprocal 0000000000000000 t reciprocal 0000000000000020 r _zz10reciprocale19__pretty_function__ without (with _cplusplus wrote it):
$ nm reciprocal.o | grep reciprocal 0000000000000000 t _z10reciprocali 0000000000000020 r _zz10reciprocalie19__pretty_function__ c++ c gcc
Comments
Post a Comment