CPP test program fails for x64 platform
Dear developers,
I hope somebody in this maillist can help me with my (perhaps trivial)
problem.
I have written autoconf script, which among all other checks performs
the following test:
AC_LANG([C++])
...
AC_SEARCH_LIBS([pnm_readpnminit], [netpbm pnm])
The resulting configure script works fine for Debain x32 and Open SuSE
x32, but when it came to x64 platform the following problem occurred for
the above mentioned test, that generates the following program:
=== conftest_orig.cpp ===
#ifdef __cplusplus
extern "C"
#endif
char pnm_readpnminit ();
int
main ()
{
return pnm_readpnminit ();
;
return 0;
}
=== end ===
# g++ -o conftest -g -Wl,--as-needed conftest_orig.cpp -lnetpbm -lm
/usr/lib64/libnetpbm.so: undefined reference to `log'
/usr/lib64/libnetpbm.so: undefined reference to `pow'
collect2: ld returned 1 exit status
When I modified the test program by removing the "#ifdef", it starts to
work (as expected by configure script):
=== conftest.cpp ===
char pnm_readpnminit ();
int
main ()
{
return pnm_readpnminit ();
;
return 0;
}
=== end ===
# g++ -o conftest -g -Wl,--as-needed conftest.cpp -lnetpbm -lm
/root/tmp/cc2mdVNX.o: In function `main':
/work/conftest.cpp:5: undefined reference to `pnm_readpnminit()'
collect2: ld returned 1 exit status
My questions to the community are:
- Why extern "C" causes GCC not to find "log" and "pow" from libm,
needed by libnetpbm?
- Why exactly the same configure script works OK for x32 platform?
- How to overcome the problem?
Thank you so much in advance for any help.
--
With best regards,
Dmitry
Reply to: