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