On 31.03.2011 18:50, Matthias Klose wrote: >> 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? > > caused by the ld --no-add-needed default? Link libnetpbm.so with -lm. > See http://wiki.debian.org/ToolChain/DSOLinking
Matthias, thank you a lot. "-Wl,--as-needed" argument looks to play the essential role! So the original test script is now compiled without errors: # g++ -o conftest conftest_orig.cpp -lnetpbm -lm Correct me if I am wrong with points below: * With "-Wl,--as-needed" the linker will invalidate all libraries, from which no symbols are used by current module. "-lm" was ignored and that caused the mentioned error message: /usr/lib64/libnetpbm.so: undefined reference to `log' /usr/lib64/libnetpbm.so: undefined reference to `pow' * It also means that libnetpbm.so was incorrectly linked as it should depend on libm. However it does not: # ldd /usr/lib64/libnetpbm.so linux-vdso.so.1 => (0x00007fffe4777000) libc.so.6 => /lib64/libc.so.6 (0x00007fa0a43dd000) /lib64/ld-linux-x86-64.so.2 (0x00007fa0a4997000) * If libnetpbm.so is correctly linked, "-Wl,--as-needed" will not break the test anymore. * The wiki page says: "Introducing --as-needed will show some sloppy configure scripts, which fail to build with --as-needed" and that is exactly this case, right? Thank you. -- With best regards, Dmitry -- To UNSUBSCRIBE, email to debian-gcc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/4d958d3a.1010...@mail.ru