mearvk <[EMAIL PROTECTED]> writes: > "g++ -c lip.C" gives me lip.o. > "g++ -c test.C" gives me test.o > "g++ -o out test.o lip.o -lm" should give me 'out' as an executable > but it doesn't, instead giving me: > > lip.o(.text+0xf88d): In function `zfread(_IO_FILE*, long**)': > : undefined reference to `log(double)'
The problem is that lip.o references C++ mangled function 'log(double)', but it should be referencing 'extern "C"' function 'log'. Here is an example showing the same problem: $ cat t.c double log(double); /* problem */ int main() { double d = log(100); return 0; } When above code is compiled in "C" mode, it works: $ gcc -fno-builtin t.c -lm But when compiled as C++, it doesn't: $ g++ -fno-builtin t.c -lm /tmp/cc0o3mP7.o(.text+0x20): In function `main': : undefined reference to `log(double)' collect2: ld returned 1 exit status The problem is that 'double log(double);' is correct for C, but it is *not* correct for C++. It should be: #ifdef __cplusplus extern "C" #endif double log(double); I am guessing that your 'lip.C' should actually be named 'lip.c', and should be compiled with 'gcc' instead of 'g++'. Cheers, -- In order to understand recursion you must first understand recursion. Remove /-nsp/ for email. _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus