Summary: | media-libs/libpano13-2.9.19 fail to compile with undefined reference to `float2rgbe' and 'rgbe2float' | ||
---|---|---|---|
Product: | Gentoo Linux | Reporter: | Thierry De Leeuw <thierry> |
Component: | Current packages | Assignee: | Markus Meier <maekke> |
Status: | UNCONFIRMED --- | ||
Severity: | normal | CC: | asturm, musv, m_gentoobug, rose |
Priority: | Normal | ||
Version: | unspecified | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Package list: | Runtime testing required: | --- | |
Attachments: | emerge --info |
Can confirm this error. As a workaround it helps to remove the INLINE keywords. For some reason it works with inline on my other machine, which has been updated more recently. I just saw this with gcc 7.3.0 and -Os. It does, however, build with -O2. This is because -Os inlines less frequently than -O2 and so the undefined references are from cases which did not get inlined. Likely as not this will be compiler/version/option dependent. I don't know if this is a gcc bug or a libpano13 bug. My understanding was that if the compiler does not inline something it should include an out-of-line version in the object module. I can confirm this, compilation with -Os fails, using -O2 it goes fine. I'd suspect toolchain here, because libpano13 is the same version for quite a time, while other things changed, and those years ago, I've emerged it without problem - it failed now while doing `emerge -e world`. Confirmed that this fails to compile with -Os: /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /var/tmp/portage/media-libs/libpano13-2.9.19/work/libpano13-2.9.19/.libs/libpano13.so: undefined reference to `float2rgbe' /usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /var/tmp/portage/media-libs/libpano13-2.9.19/work/libpano13-2.9.19/.libs/libpano13.so: undefined reference to `rgbe2float' collect2: error: ld returned 1 exit status For the compile: Host system type : x86_64-pc-linux-gnu Option Value ------------------------------------------------------------------------- Shared libraries --enable-shared=yes Static libraries --enable-static=no JPEG --with-jpeg= have_jpeg = yes PNG --with-png= have_png = yes TIFF --with-tiff= have_tiff = yes ZLIB --with-zlib= have_zlib = yes JAVA --with-java=no have_java = no Options used to compile and link: PREFIX = /usr VERSION = 2.9.19 CC = x86_64-pc-linux-gnu-gcc CFLAGS = -march=native -mtune=native -Os -fomit-frame-pointer -pipe -fstack-protector-strong CPPFLAGS = DEFS = -DHAVE_CONFIG_H LDFLAGS = -Wl,-O1 -Wl,--as-needed LIBS = -lm CXX = CXXFLAGS = -march=native -mtune=native -Os -fomit-frame-pointer -pipe -fstack-protector-strong JPEG_FLAGS = -DHasJPEG LIB_JPEG = -ljpeg PNG_FLAGS = -DHasPNG LIB_PNG = -lpng TIFF_FLAGS = -DHasTIFF LIB_TIFF = -ltiff ZLIB_FLAGS = -DHasZLIB LIB_ZLIB = -lz JAVA_FLAGS = ENDIAN_FLAG = - for gcc (Gentoo 9.3.0-r1 p3) 9.3.0 That fails as described. Whereas using -O2 for gcc is successful: Options used to compile and link: PREFIX = /usr VERSION = 2.9.19 CC = x86_64-pc-linux-gnu-gcc CFLAGS = -march=native -mtune=native -O2 -fomit-frame-pointer -pipe -fstack-protector-strong CPPFLAGS = DEFS = -DHAVE_CONFIG_H LDFLAGS = -Wl,-O1 -Wl,--as-needed LIBS = -lm CXX = CXXFLAGS = -march=native -mtune=native -O2 -fomit-frame-pointer -pipe -fstack-protector-strong JPEG_FLAGS = -DHasJPEG LIB_JPEG = -ljpeg PNG_FLAGS = -DHasPNG LIB_PNG = -lpng TIFF_FLAGS = -DHasTIFF LIB_TIFF = -ltiff ZLIB_FLAGS = -DHasZLIB LIB_ZLIB = -lz JAVA_FLAGS = ENDIAN_FLAG = That successfully compiles and installs (the only change is the -O2). Thanks for a very curious bug report! Regards, Martin |
Created attachment 470252 [details] emerge --info When compiling the libpan13, I get the following errors /tmp/portage/media-libs/libpano13-2.9.19/work/libpano13-2.9.19/.libs/libpano13.so: undefined reference to `float2rgbe' /tmp/portage/media-libs/libpano13-2.9.19/work/libpano13-2.9.19/.libs/libpano13.so: undefined reference to `rgbe2float' This is likely caused by the INLINE use in rgbe.h INLINE void float2rgbe(unsigned char rgbe[4], float red, float green, float blue); INLINE void rgbe2float(float *red, float *green, float *blue, unsigned char rgbe[4]);