BestImageViewer / geeqie

claiming to be the best image viewer / photo collection browser
http://www.geeqie.org/
GNU General Public License v2.0
475 stars 78 forks source link

Build fails with LTO #1270

Closed eli-schwartz closed 7 months ago

eli-schwartz commented 7 months ago

Setup:

Describe the bug I built with these *FLAGS: -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing

I got this error:

FAILED: src/geeqie 
x86_64-pc-linux-gnu-g++  -o src/geeqie src/geeqie.p/meson-generated_.._.._po_translators.c.o src/geeqie.p/meson-generated_.._authors_authors.c.o src/geeqie.p/meson-generated_.._icons_icons.c.o src/geeqie.p/meson-generated_.._ui_ui.c.o src/geeqie.p/meson-generated_.._gq-marshal-pragma.c.o src/geeqie.p/advanced-exif.cc.o src/geeqie.p/archives.cc.o src/geeqie.p/bar.cc.o src/geeqie.p/bar-comment.cc.o src/geeqie.p/bar-exif.cc.o src/geeqie.p/bar-gps.cc.o src/geeqie.p/bar-histogram.cc.o src/geeqie.p/bar-keywords.cc.o src/geeqie.p/bar-rating.cc.o src/geeqie.p/bar-sort.cc.o src/geeqie.p/cache.cc.o src/geeqie.p/cache-loader.cc.o src/geeqie.p/cache-maint.cc.o src/geeqie.p/cellrenderericon.cc.o src/geeqie.p/collect.cc.o src/geeqie.p/collect-dlg.cc.o src/geeqie.p/collect-io.cc.o src/geeqie.p/collect-table.cc.o src/geeqie.p/color-man.cc.o src/geeqie.p/compat.cc.o src/geeqie.p/debug.cc.o src/geeqie.p/desktop-file.cc.o src/geeqie.p/dnd.cc.o src/geeqie.p/dupe.cc.o src/geeqie.p/editors.cc.o src/geeqie.p/exif.cc.o src/geeqie.p/exif-common.cc.o src/geeqie.p/exiv2.cc.o src/geeqie.p/filecache.cc.o src/geeqie.p/filedata.cc.o src/geeqie.p/filefilter.cc.o src/geeqie.p/format-canon.cc.o src/geeqie.p/format-fuji.cc.o src/geeqie.p/format-nikon.cc.o src/geeqie.p/format-olympus.cc.o src/geeqie.p/format-raw.cc.o src/geeqie.p/fullscreen.cc.o src/geeqie.p/histogram.cc.o src/geeqie.p/history-list.cc.o src/geeqie.p/image.cc.o src/geeqie.p/image-load.cc.o src/geeqie.p/image-load-collection.cc.o src/geeqie.p/image-load-cr3.cc.o src/geeqie.p/image-load-dds.cc.o src/geeqie.p/image-load-djvu.cc.o src/geeqie.p/image-load-external.cc.o src/geeqie.p/image-load-ffmpegthumbnailer.cc.o src/geeqie.p/image-load-gdk.cc.o src/geeqie.p/image-load-heif.cc.o src/geeqie.p/image-load-j2k.cc.o src/geeqie.p/image-load-jpeg.cc.o src/geeqie.p/image-load-jpegxl.cc.o src/geeqie.p/image-load-libraw.cc.o src/geeqie.p/image-load-pdf.cc.o src/geeqie.p/image-load-psd.cc.o src/geeqie.p/image-load-svgz.cc.o src/geeqie.p/image-load-tiff.cc.o src/geeqie.p/image-load-webp.cc.o src/geeqie.p/image-load-zxscr.cc.o src/geeqie.p/image-overlay.cc.o src/geeqie.p/img-view.cc.o src/geeqie.p/jpeg-parser.cc.o src/geeqie.p/keymap-template.cc.o src/geeqie.p/layout.cc.o src/geeqie.p/layout-config.cc.o src/geeqie.p/layout-image.cc.o src/geeqie.p/layout-util.cc.o src/geeqie.p/logwindow.cc.o src/geeqie.p/lua.cc.o src/geeqie.p/main.cc.o src/geeqie.p/md5-util.cc.o src/geeqie.p/menu.cc.o src/geeqie.p/metadata.cc.o src/geeqie.p/misc.cc.o src/geeqie.p/options.cc.o src/geeqie.p/osd.cc.o src/geeqie.p/pixbuf-renderer.cc.o src/geeqie.p/pixbuf-util.cc.o src/geeqie.p/preferences.cc.o src/geeqie.p/print.cc.o src/geeqie.p/rcfile.cc.o src/geeqie.p/remote.cc.o src/geeqie.p/renderer-tiles.cc.o src/geeqie.p/search-and-run.cc.o src/geeqie.p/search.cc.o src/geeqie.p/secure-save.cc.o src/geeqie.p/shortcuts.cc.o src/geeqie.p/similar.cc.o src/geeqie.p/slideshow.cc.o src/geeqie.p/thumb.cc.o src/geeqie.p/thumb-standard.cc.o src/geeqie.p/toolbar.cc.o src/geeqie.p/trash.cc.o src/geeqie.p/ui-bookmark.cc.o src/geeqie.p/ui-fileops.cc.o src/geeqie.p/ui-help.cc.o src/geeqie.p/ui-menu.cc.o src/geeqie.p/ui-misc.cc.o src/geeqie.p/ui-pathsel.cc.o src/geeqie.p/ui-tabcomp.cc.o src/geeqie.p/ui-tree-edit.cc.o src/geeqie.p/ui-utildlg.cc.o src/geeqie.p/uri-utils.cc.o src/geeqie.p/utilops.cc.o src/geeqie.p/view-dir.cc.o src/geeqie.p/view-dir-list.cc.o src/geeqie.p/view-dir-tree.cc.o src/geeqie.p/window.cc.o src/geeqie.p/pan-view_pan-calendar.cc.o src/geeqie.p/pan-view_pan-folder.cc.o src/geeqie.p/pan-view_pan-grid.cc.o src/geeqie.p/pan-view_pan-item.cc.o src/geeqie.p/pan-view_pan-timeline.cc.o src/geeqie.p/pan-view_pan-util.cc.o src/geeqie.p/pan-view_pan-view.cc.o src/geeqie.p/pan-view_pan-view-filter.cc.o src/geeqie.p/pan-view_pan-view-search.cc.o src/geeqie.p/third-party_whereami.cc.o src/geeqie.p/third-party_zonedetect.cc.o src/geeqie.p/view-file_view-file.cc.o src/geeqie.p/view-file_view-file-icon.cc.o src/geeqie.p/view-file_view-file-list.cc.o -flto -Wl,--as-needed -Wl,--no-undefined -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -fstack-clash-protection -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wformat -Werror=format-security -Wl,-O1 -Wl,--as-needed -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -Wl,--start-group /usr/lib64/libgtk-3.so /usr/lib64/libgdk-3.so /usr/lib64/libharfbuzz.so /usr/lib64/libpangocairo-1.0.so /usr/lib64/libpango-1.0.so /usr/lib64/libatk-1.0.so /usr/lib64/libcairo.so /usr/lib64/libcairo-gobject.so /usr/lib64/libgdk_pixbuf-2.0.so /usr/lib64/libgio-2.0.so /usr/lib64/libglib-2.0.so /usr/lib64/libgobject-2.0.so /usr/lib64/libexiv2.so /usr/lib64/libgspell-1.so /usr/lib64/libenchant-2.so /usr/lib64/liblcms2.so /usr/lib64/liblcms2_fast_float.so /usr/lib64/liblcms2_threaded.so /usr/lib64/libjpeg.so /usr/lib64/libwebp.so /usr/lib64/libpoppler-glib.so -pthread /usr/lib64/libtiff.so -Wl,--end-group
../geeqie-9999/src/bar-exif.cc:92:8: error: type ‘struct ConfDialogData’ violates the C++ One Definition Rule [-Werror=odr]
   92 | struct ConfDialogData
      |        ^
../geeqie-9999/src/bar-keywords.cc:156:8: note: a different type is defined in another translation unit
  156 | struct ConfDialogData
      |        ^
../geeqie-9999/src/bar-exif.cc:94:20: note: the first difference of corresponding definitions is field ‘widget’
   94 |         GtkWidget *widget; /* pane or entry, devidet by presenceof "pane_data" or "entry_data" */
      |                    ^
../geeqie-9999/src/bar-keywords.cc:158:27: note: a field with different name is defined in another translation unit
  158 |         PaneKeywordsData *pkd;
      |                           ^
../geeqie-9999/src/layout.cc:2259:8: error: type ‘struct LayoutConfig’ violates the C++ One Definition Rule [-Werror=odr]
 2259 | struct LayoutConfig
      |        ^
../geeqie-9999/src/layout-config.cc:46:8: note: a different type is defined in another translation unit
   46 | struct LayoutConfig
      |        ^
../geeqie-9999/src/layout.cc:2261:23: note: the first difference of corresponding definitions is field ‘lw’
 2261 |         LayoutWindow *lw;
      |                       ^
../geeqie-9999/src/layout-config.cc:48:20: note: a field with different name is defined in another translation unit
   48 |         GtkWidget *box;
      |                    ^
../geeqie-9999/src/collect-table.cc:2501:8: error: type ‘struct ColumnData’ violates the C++ One Definition Rule [-Werror=odr]
 2501 | struct ColumnData
      |        ^
../geeqie-9999/src/view-file/view-file-icon.cc:2075:8: note: a different type is defined in another translation unit
 2075 | struct ColumnData
      |        ^
../geeqie-9999/src/collect-table.cc:2503:23: note: the first difference of corresponding definitions is field ‘ct’
 2503 |         CollectTable *ct;
      |                       ^
../geeqie-9999/src/view-file/view-file-icon.cc:2077:19: note: a field with different name is defined in another translation unit
 2077 |         ViewFile *vf;
      |                   ^
lto1: some warnings being treated as errors
lto-wrapper: fatal error: x86_64-pc-linux-gnu-g++ returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

Error logs or seg. fault files

build.log.gz

Additional context

Originally reported downstream at https://bugs.gentoo.org/924378

qarkai commented 7 months ago

@caclark Looks like it's enough to move structs to anonymous namespace. I'll fix this later if you don't mind.