Skip to content

Fix multiple definition of struct options

Mario Haustein requested to merge hamarituc/siril:options into master

Description

This MR fixes a compilation error with more recent C++ compilers. The struct option is multiply definied, which is considered as an error:

c/libsiril.a -Wl,--no-whole-archive -O2 -march=x86-64 -pipe -frecord-gcc-switches -fno-diagnostics-color -fmessage-length=0 -Werror=odr -Wl,-O1 -Wl,--as-needed -Wl,-z,pack-relative-relocs subprojects/htmesh/libhtmesh.a subprojects/kplot/libkplot.a -rdynamic -lfftw3f_omp -lm /usr/lib64/libglib-2.0.so /usr/lib64/libgio-2.0.so /usr/lib64/libgobject-2.0.so /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/libcurl.so /usr/lib64/libgsl.so /usr/lib64/libgslcblas.so /usr/lib64/libopencv_gapi.so /usr/lib64/libopencv_stitching.so /usr/lib64/libopencv_alphamat.so /usr/lib64/libopencv_aruco.so /usr/lib64/libopencv_bgsegm.so /usr/lib64/libopencv_bioinspired.so /usr/lib64/libopencv_ccalib.so /usr/lib64/libopencv_dnn_objdetect.so /usr/lib64/libopencv_dnn_superres.so /usr/lib64/libopencv_dpm.so /usr/lib64/libopencv_face.so /usr/lib64/libopencv_fuzzy.so /usr/lib64/libopencv_hfs.so /usr/lib64/libopencv_img_hash.so /usr/lib64/libopencv_intensity_transform.so /usr/lib64/libopencv_line_descriptor.so /usr/lib64/libopencv_mcc.so /usr/lib64/libopencv_quality.so /usr/lib64/libopencv_rapid.so /usr/lib64/libopencv_reg.so /usr/lib64/libopencv_rgbd.so /usr/lib64/libopencv_saliency.so /usr/lib64/libopencv_shape.so /usr/lib64/libopencv_stereo.so /usr/lib64/libopencv_structured_light.so /usr/lib64/libopencv_phase_unwrapping.so /usr/lib64/libopencv_superres.so /usr/lib64/libopencv_optflow.so /usr/lib64/libopencv_surface_matching.so /usr/lib64/libopencv_tracking.so /usr/lib64/libopencv_highgui.so /usr/lib64/libopencv_datasets.so /usr/lib64/libopencv_text.so /usr/lib64/libopencv_plot.so /usr/lib64/libopencv_ml.so /usr/lib64/libopencv_videostab.so /usr/lib64/libopencv_videoio.so /usr/lib64/libopencv_wechat_qrcode.so /usr/lib64/libopencv_ximgproc.so /usr/lib64/libopencv_video.so /usr/lib64/libopencv_xobjdetect.so /usr/lib64/libopencv_objdetect.so /usr/lib64/libopencv_calib3d.so /usr/lib64/libopencv_imgcodecs.so /usr/lib64/libopencv_features2d.so /usr/lib64/libopencv_dnn.so /usr/lib64/libopencv_flann.so /usr/lib64/libopencv_xphoto.so /usr/lib64/libopencv_photo.so /usr/lib64/libopencv_imgproc.so /usr/lib64/libopencv_core.so /usr/lib64/librtprocess.so /usr/lib64/libexiv2.so /usr/lib64/libwcs.so /usr/lib64/libfftw3f.so /usr/lib64/libcfitsio.so /usr/lib64/libjson-glib-1.0.so /usr/lib64/libraw.so /usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so -fopenmp /usr/lib64/liblcms2.so /usr/lib64/liblcms2_fast_float.so /usr/lib64/liblcms2_threaded.so /usr/lib64/libtiff.so /usr/lib64/libjpeg.so /usr/lib64/libpng16.so /usr/lib64/libheif.so -Wl,--end-group -fopenmp -fopenmp -fopenmp
../siril-1.2.1/src/filters/deconvolution/estimate_kernel.hpp:59:8: error: type ‘struct options’ violates the C++ One Definition Rule [-Werror=odr]
   59 | struct options {
      |        ^
../siril-1.2.1/src/filters/deconvolution/options.hpp:5:8: note: a different type is defined in another translation unit
    5 | struct options {
      |        ^
../siril-1.2.1/src/filters/deconvolution/estimate_kernel.hpp:60:10: note: the first difference of corresponding definitions is field ‘verbose’
   60 |     bool verbose;
      |          ^
../siril-1.2.1/src/filters/deconvolution/options.hpp:7:9: note: a field with different name is defined in another translation unit
    7 |     int kernelSize;
      |         ^
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

Changes Made

Renamed the structure in src/filters/deconvolution/estimate_kernel.hpp from struct options to struct estimate_kernel_options.

Related Issues

N/A

Additional Notes

You can trigger the error with the -flto -Werror=odr compiler flags.

Found through automatic compile tests downstream in Gentoo Linux: https://bugs.gentoo.org/927345

Merge Request Checklists

  • Code follows project coding guidelines and its checklist
  • N/A I have submitted a MR in the documentation repository if required
  • I have updated Changelog and NEWS, listing the related issues.
  • N/A If my MR introduces new dependencies, I have run all the CIs, even the optional (manual) jobs.
Edited by Mario Haustein

Merge request reports