Well this definitely looks like a bug. I can't imagine any reason that
would be correct. I'm trying to reproduce it now, with GraphicsMagick.

I filed a bug [1]. Thanks for the detailed report!

Thank you very much for volunteering to be a libtool maintainer.

You would need latest GraphicsMagick code from Mercurial in order to reproduce. And then configure with something like:

configure 'CC=gcc-10' 'CXX=g++-10' 'CFLAGS=-O2 -g -Wall -Winline -W -Wformat-security -Wpointer-arith -Wdisabled-optimization -Wmissing-noreturn -Wno-unknown-pragmas -Wunused-but-set-variable' 'CXXFLAGS=-O -g -Wall -Winline -W -Wextra -Wno-unknown-pragmas' 'LDFLAGS=-L/usr/local/lib -Wl,-rpath,/usr/local/lib' '--enable-maintainer-mode' '--disable-silent-rules' '--with-quantum-depth=16' '--disable-shared' '--enable-static' '--disable-openmp' '--without-threads' '--without-bzlib' '--without-dps' '--without-fpx' '--without-gs' '--without-jbig' '--without-webp' '--without-heif' '--without-jpeg' '--without-jp2' '--without-jxl' '--without-lcms2' '--without-lzma' '--without-png' '--without-tiff' '--without-trio' '--without-ttf' '--without-wmf' '--without-xml' '--without-zlib' '--without-zstd' '--without-x'

However, I now know what the problem is. Recently there is a desire to link using the C++ compiler because there are C++ libraries involved and it is said that it is most portable to link using the C++ compiler (so exceptions are assured to work, etc.).

After adding --debug to the libtool flags, I can see that there is tremendous effort to reject libraries that the compiler adds by default. The testing is being done with the C++ compiler and it seems like -lm is added by default when using the C++ compiler. It also seems that -lm is not added by default when using the C compiler.

The -lm library is omitted due to the C++ compiler, but the utilities/gm program (a tiny bit of C code) is still being linked using the C compiler. If I link it using the C++ compiler, then there is a successful link.

If libtool is going to test based on the C++ compiler, then it should also assure that linkage of dependent programs is done using the C++ compiler.

I now know how to solve this issue as pertains to GraphicsMagick. It seems that this disparity between C and C++ may cause harm for other software as well. The issue with -lm is well hidden because many libraries depend on -lm and if shared libraries depending on -lm are linked with, then a linkage dependency with -lm is implicitly added, hiding the underlying issue.

Bob
--
Bob Friesenhahn
bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/
Public Key,     http://www.simplesystems.org/users/bfriesen/public-key.txt

Reply via email to