8bitbubsy / pt2-clone

ProTracker 2 clone for Windows/macOS/Linux
https://16-bits.org
BSD 3-Clause "New" or "Revised" License
447 stars 32 forks source link

Link time problem with multiple definition of symbols #30

Closed ycollet closed 1 year ago

ycollet commented 1 year ago

I built protracker on Fedora 36, I've got the following error during link phase:

[100%] Linking C executable ../release/other/pt2-clone
/usr/bin/cmake -E cmake_link_script CMakeFiles/pt2-clone.dir/link.txt --verbose=1
/usr/lib64/ccache/gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -m64  -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wl,-z,relro -Wl,--as-needed  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1  -Wl,--build-id=sha1 -Wl,-dT,/home/collette/rpmbuild/BUILD/pt2-clone-1.52/.package_note-protracker2-1.52-4.fc36.x86_64.ld CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_aboutscreen.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_diskop.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_editop.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_font.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_icon.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_loop_pins.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_mute_buttons.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_patcursor.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_pointer.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_posed.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_sampler.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_spectrum.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_tracker.c.o CMakeFiles/pt2-clone.dir/src/gfx/pt2_gfx_vumeter.c.o CMakeFiles/pt2-clone.dir/src/pt2_amigafilters.c.o CMakeFiles/pt2-clone.dir/src/pt2_askbox.c.o CMakeFiles/pt2-clone.dir/src/pt2_audio.c.o CMakeFiles/pt2-clone.dir/src/pt2_blep.c.o CMakeFiles/pt2-clone.dir/src/pt2_bmp.c.o CMakeFiles/pt2-clone.dir/src/pt2_chordmaker.c.o CMakeFiles/pt2-clone.dir/src/pt2_config.c.o CMakeFiles/pt2-clone.dir/src/pt2_diskop.c.o CMakeFiles/pt2-clone.dir/src/pt2_downsample2x.c.o CMakeFiles/pt2-clone.dir/src/pt2_edit.c.o CMakeFiles/pt2-clone.dir/src/pt2_helpers.c.o CMakeFiles/pt2-clone.dir/src/pt2_hpc.c.o CMakeFiles/pt2-clone.dir/src/pt2_keyboard.c.o CMakeFiles/pt2-clone.dir/src/pt2_main.c.o CMakeFiles/pt2-clone.dir/src/pt2_math.c.o CMakeFiles/pt2-clone.dir/src/pt2_mod2wav.c.o CMakeFiles/pt2-clone.dir/src/pt2_module_loader.c.o CMakeFiles/pt2-clone.dir/src/pt2_module_saver.c.o CMakeFiles/pt2-clone.dir/src/pt2_mouse.c.o CMakeFiles/pt2-clone.dir/src/pt2_palette.c.o CMakeFiles/pt2-clone.dir/src/pt2_pat2smp.c.o CMakeFiles/pt2-clone.dir/src/pt2_pattern_viewer.c.o CMakeFiles/pt2-clone.dir/src/pt2_paula.c.o CMakeFiles/pt2-clone.dir/src/pt2_rcfilter.c.o CMakeFiles/pt2-clone.dir/src/pt2_replayer.c.o CMakeFiles/pt2-clone.dir/src/pt2_sample_loader.c.o CMakeFiles/pt2-clone.dir/src/pt2_sample_saver.c.o CMakeFiles/pt2-clone.dir/src/pt2_sampler.c.o CMakeFiles/pt2-clone.dir/src/pt2_sampling.c.o CMakeFiles/pt2-clone.dir/src/pt2_scopes.c.o CMakeFiles/pt2-clone.dir/src/pt2_structs.c.o CMakeFiles/pt2-clone.dir/src/pt2_sync.c.o CMakeFiles/pt2-clone.dir/src/pt2_tables.c.o CMakeFiles/pt2-clone.dir/src/pt2_textout.c.o CMakeFiles/pt2-clone.dir/src/pt2_unicode.c.o CMakeFiles/pt2-clone.dir/src/pt2_visuals.c.o CMakeFiles/pt2-clone.dir/src/pt2_xpk.c.o -o ../release/other/pt2-clone  -lm /usr/lib64/libSDL2main.a /usr/lib64/libSDL2-2.0.so.0.2400.0 
/usr/bin/ld: CMakeFiles/pt2-clone.dir/src/pt2_audio.c.o (symbol from plugin): in function `audio':
(.text+0x0): multiple definition of `processAmigaFilters'; CMakeFiles/pt2-clone.dir/src/pt2_amigafilters.c.o (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/pt2-clone.dir/src/pt2_keyboard.c.o (symbol from plugin): in function `gotoNextMulti':
(.text+0x0): multiple definition of `processAmigaFilters'; CMakeFiles/pt2-clone.dir/src/pt2_amigafilters.c.o (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/pt2-clone.dir/src/pt2_mod2wav.c.o (symbol from plugin): in function `mod2WavDrawFadeoutToggle':
(.text+0x0): multiple definition of `processAmigaFilters'; CMakeFiles/pt2-clone.dir/src/pt2_amigafilters.c.o (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/pt2-clone.dir/src/pt2_module_loader.c.o (symbol from plugin): in function `modLoad':
(.text+0x0): multiple definition of `processAmigaFilters'; CMakeFiles/pt2-clone.dir/src/pt2_amigafilters.c.o (symbol from plugin):(.text+0x0): first defined here
/usr/bin/ld: CMakeFiles/pt2-clone.dir/src/pt2_replayer.c.o (symbol from plugin): in function `ciaBpm2Hz':
(.text+0x0): multiple definition of `processAmigaFilters'; CMakeFiles/pt2-clone.dir/src/pt2_amigafilters.c.o (symbol from plugin):(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

The workaround I found is to add "-z muldef" in the LDFLAGS env variable.

8bitbubsy commented 1 year ago

I found the actual problem, please try again. Remember to remove the "-z muldef" workaround.

ycollet commented 1 year ago

Thanks a lot, I will test ASAP :)

ycollet commented 1 year ago

Works fine for me (without -z muldef :) ). I close the ticket !