We are currently migrating Bugzilla to GitHub issues.
Any changes made to the bug tracker now will be lost, so please do not post new bugs or make changes to them.
When we're done, all bug URLs will redirect to their equivalent location on the new bug tracker.

Bug 5349 - Failed to link the SDL_sysjoystick.c.o while building by CMake
Summary: Failed to link the SDL_sysjoystick.c.o while building by CMake
Status: RESOLVED FIXED
Alias: None
Product: SDL
Classification: Unclassified
Component: build (show other bugs)
Version: HG 2.1
Hardware: x86_64 Linux
: P2 major
Assignee: Sam Lantinga
QA Contact: Sam Lantinga
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-11-12 08:20 UTC by Vitaly Novichkov
Modified: 2020-11-12 12:21 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Novichkov 2020-11-12 08:20:04 UTC
Hello!

I suddenly found that the latest libSDL2 won't build and fails with next error:

```
FAILED: libSDL2-2.0d.so.0.12.1 
: && /usr/bin/cc -fPIC -idirafter /home/runner/SDL-Mixer-X/build-debug/external/AudioCodecs/src/AudioCodecs-build/external/SDL2/src/SDL2HG/src/video/khronos -DHAVE_LINUX_VERSION_H -D_REENTRANT -I/usr/include -msse3 -msse2 -msse -m3dnow -mmmx -Wshadow -fvisibility=hidden -Wdeclaration-after-statement -Werror=declaration-after-statement -fno-strict-aliasing -Wall  -g   -shared -Wl,-soname,libSDL2-2.0d.so.1 -o libSDL2-2.0d.so.0.12.1 CMakeFiles/SDL2.dir/src/SDL.c.o CMakeFiles/SDL2.dir/src/SDL_assert.c.o CMakeFiles/SDL2.dir/src/SDL_dataqueue.c.o CMakeFiles/SDL2.dir/src/SDL_error.c.o CMakeFiles/SDL2.dir/src/SDL_hints.c.o CMakeFiles/SDL2.dir/src/SDL_log.c.o CMakeFiles/SDL2.dir/src/atomic/SDL_atomic.c.o CMakeFiles/SDL2.dir/src/atomic/SDL_spinlock.c.o CMakeFiles/SDL2.dir/src/audio/SDL_audio.c.o CMakeFiles/SDL2.dir/src/audio/SDL_audiocvt.c.o CMakeFiles/SDL2.dir/src/audio/SDL_audiodev.c.o CMakeFiles/SDL2.dir/src/audio/SDL_audiotypecvt.c.o CMakeFiles/SDL2.dir/src/audio/SDL_mixer.c.o CMakeFiles/SDL2.dir/src/audio/SDL_wave.c.o CMakeFiles/SDL2.dir/src/cpuinfo/SDL_cpuinfo.c.o CMakeFiles/SDL2.dir/src/dynapi/SDL_dynapi.c.o CMakeFiles/SDL2.dir/src/events/SDL_clipboardevents.c.o CMakeFiles/SDL2.dir/src/events/SDL_displayevents.c.o CMakeFiles/SDL2.dir/src/events/SDL_dropevents.c.o CMakeFiles/SDL2.dir/src/events/SDL_events.c.o CMakeFiles/SDL2.dir/src/events/SDL_gesture.c.o CMakeFiles/SDL2.dir/src/events/SDL_keyboard.c.o CMakeFiles/SDL2.dir/src/events/SDL_mouse.c.o CMakeFiles/SDL2.dir/src/events/SDL_quit.c.o CMakeFiles/SDL2.dir/src/events/SDL_touch.c.o CMakeFiles/SDL2.dir/src/events/SDL_windowevents.c.o CMakeFiles/SDL2.dir/src/file/SDL_rwops.c.o CMakeFiles/SDL2.dir/src/haptic/SDL_haptic.c.o CMakeFiles/SDL2.dir/src/libm/e_atan2.c.o CMakeFiles/SDL2.dir/src/libm/e_exp.c.o CMakeFiles/SDL2.dir/src/libm/e_fmod.c.o CMakeFiles/SDL2.dir/src/libm/e_log.c.o CMakeFiles/SDL2.dir/src/libm/e_log10.c.o CMakeFiles/SDL2.dir/src/libm/e_pow.c.o CMakeFiles/SDL2.dir/src/libm/e_rem_pio2.c.o CMakeFiles/SDL2.dir/src/libm/e_sqrt.c.o CMakeFiles/SDL2.dir/src/libm/k_cos.c.o CMakeFiles/SDL2.dir/src/libm/k_rem_pio2.c.o CMakeFiles/SDL2.dir/src/libm/k_sin.c.o CMakeFiles/SDL2.dir/src/libm/k_tan.c.o CMakeFiles/SDL2.dir/src/libm/s_atan.c.o CMakeFiles/SDL2.dir/src/libm/s_copysign.c.o CMakeFiles/SDL2.dir/src/libm/s_cos.c.o CMakeFiles/SDL2.dir/src/libm/s_fabs.c.o CMakeFiles/SDL2.dir/src/libm/s_floor.c.o CMakeFiles/SDL2.dir/src/libm/s_scalbn.c.o CMakeFiles/SDL2.dir/src/libm/s_sin.c.o CMakeFiles/SDL2.dir/src/libm/s_tan.c.o CMakeFiles/SDL2.dir/src/locale/SDL_locale.c.o CMakeFiles/SDL2.dir/src/misc/SDL_url.c.o CMakeFiles/SDL2.dir/src/power/SDL_power.c.o CMakeFiles/SDL2.dir/src/render/SDL_d3dmath.c.o CMakeFiles/SDL2.dir/src/render/SDL_render.c.o CMakeFiles/SDL2.dir/src/render/SDL_yuv_sw.c.o CMakeFiles/SDL2.dir/src/render/direct3d/SDL_render_d3d.c.o CMakeFiles/SDL2.dir/src/render/direct3d/SDL_shaders_d3d.c.o CMakeFiles/SDL2.dir/src/render/direct3d11/SDL_render_d3d11.c.o CMakeFiles/SDL2.dir/src/render/direct3d11/SDL_shaders_d3d11.c.o CMakeFiles/SDL2.dir/src/render/opengl/SDL_render_gl.c.o CMakeFiles/SDL2.dir/src/render/opengl/SDL_shaders_gl.c.o CMakeFiles/SDL2.dir/src/render/opengles/SDL_render_gles.c.o CMakeFiles/SDL2.dir/src/render/opengles2/SDL_render_gles2.c.o CMakeFiles/SDL2.dir/src/render/opengles2/SDL_shaders_gles2.c.o CMakeFiles/SDL2.dir/src/render/psp/SDL_render_psp.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_blendfillrect.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_blendline.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_blendpoint.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_drawline.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_drawpoint.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_render_sw.c.o CMakeFiles/SDL2.dir/src/render/software/SDL_rotate.c.o CMakeFiles/SDL2.dir/src/sensor/SDL_sensor.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_getenv.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_iconv.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_malloc.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_qsort.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_stdlib.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_string.c.o CMakeFiles/SDL2.dir/src/stdlib/SDL_strtokr.c.o CMakeFiles/SDL2.dir/src/thread/SDL_thread.c.o CMakeFiles/SDL2.dir/src/timer/SDL_timer.c.o CMakeFiles/SDL2.dir/src/video/SDL_RLEaccel.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_0.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_1.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_A.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_N.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_auto.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_copy.c.o CMakeFiles/SDL2.dir/src/video/SDL_blit_slow.c.o CMakeFiles/SDL2.dir/src/video/SDL_bmp.c.o CMakeFiles/SDL2.dir/src/video/SDL_clipboard.c.o CMakeFiles/SDL2.dir/src/video/SDL_egl.c.o CMakeFiles/SDL2.dir/src/video/SDL_fillrect.c.o CMakeFiles/SDL2.dir/src/video/SDL_pixels.c.o CMakeFiles/SDL2.dir/src/video/SDL_rect.c.o CMakeFiles/SDL2.dir/src/video/SDL_shape.c.o CMakeFiles/SDL2.dir/src/video/SDL_stretch.c.o CMakeFiles/SDL2.dir/src/video/SDL_surface.c.o CMakeFiles/SDL2.dir/src/video/SDL_video.c.o CMakeFiles/SDL2.dir/src/video/SDL_vulkan_utils.c.o CMakeFiles/SDL2.dir/src/video/SDL_yuv.c.o CMakeFiles/SDL2.dir/src/video/yuv2rgb/yuv_rgb.c.o CMakeFiles/SDL2.dir/src/joystick/SDL_gamecontroller.c.o CMakeFiles/SDL2.dir/src/joystick/SDL_joystick.c.o CMakeFiles/SDL2.dir/src/audio/dummy/SDL_dummyaudio.c.o CMakeFiles/SDL2.dir/src/audio/disk/SDL_diskaudio.c.o CMakeFiles/SDL2.dir/src/loadso/dlopen/SDL_sysloadso.c.o CMakeFiles/SDL2.dir/src/joystick/virtual/SDL_virtualjoystick.c.o CMakeFiles/SDL2.dir/src/video/dummy/SDL_nullevents.c.o CMakeFiles/SDL2.dir/src/video/dummy/SDL_nullframebuffer.c.o CMakeFiles/SDL2.dir/src/video/dummy/SDL_nullvideo.c.o CMakeFiles/SDL2.dir/src/audio/dsp/SDL_dspaudio.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11clipboard.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11dyn.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11events.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11framebuffer.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11keyboard.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11messagebox.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11modes.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11mouse.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11opengl.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11opengles.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11shape.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11touch.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11video.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11vulkan.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11window.c.o CMakeFiles/SDL2.dir/src/video/x11/SDL_x11xinput2.c.o CMakeFiles/SDL2.dir/src/video/x11/edid-parse.c.o CMakeFiles/SDL2.dir/src/video/x11/imKStoUCS.c.o CMakeFiles/SDL2.dir/src/core/unix/SDL_poll.c.o CMakeFiles/SDL2.dir/src/haptic/linux/SDL_syshaptic.c.o CMakeFiles/SDL2.dir/src/core/linux/SDL_evdev.c.o CMakeFiles/SDL2.dir/src/core/linux/SDL_evdev_kbd.c.o CMakeFiles/SDL2.dir/src/core/linux/SDL_evdev_capabilities.c.o CMakeFiles/SDL2.dir/src/core/linux/SDL_threadprio.c.o CMakeFiles/SDL2.dir/src/joystick/linux/SDL_sysjoystick.c.o CMakeFiles/SDL2.dir/src/joystick/steam/SDL_steamcontroller.c.o CMakeFiles/SDL2.dir/src/thread/pthread/SDL_systhread.c.o CMakeFiles/SDL2.dir/src/thread/pthread/SDL_sysmutex.c.o CMakeFiles/SDL2.dir/src/thread/pthread/SDL_syscond.c.o CMakeFiles/SDL2.dir/src/thread/pthread/SDL_systls.c.o CMakeFiles/SDL2.dir/src/thread/pthread/SDL_syssem.c.o CMakeFiles/SDL2.dir/src/misc/unix/SDL_sysurl.c.o CMakeFiles/SDL2.dir/src/power/linux/SDL_syspower.c.o CMakeFiles/SDL2.dir/src/locale/unix/SDL_syslocale.c.o CMakeFiles/SDL2.dir/src/filesystem/unix/SDL_sysfilesystem.c.o CMakeFiles/SDL2.dir/src/timer/unix/SDL_systimer.c.o CMakeFiles/SDL2.dir/src/sensor/dummy/SDL_dummysensor.c.o  -lm -ldl -Wl,--no-undefined -pthread && :
CMakeFiles/SDL2.dir/src/joystick/linux/SDL_sysjoystick.c.o: In function `LINUX_InotifyJoystickDetect':
/home/runner/SDL-Mixer-X/build-debug/external/AudioCodecs/src/AudioCodecs-build/external/SDL2/src/SDL2HG/src/joystick/linux/SDL_sysjoystick.c:558: undefined reference to `MaybeRemoveDevice'


/usr/bin/ld: CMakeFiles/SDL2.dir/src/joystick/linux/SDL_sysjoystick.c.o: relocation R_X86_64_PC32 against undefined symbol `MaybeRemoveDevice' can not be used when making a shared object; recompile with -fPIC


/usr/bin/ld: final link failed: Bad value
```

Here is a full build log:
https://semaphoreci.com/wohlstand/sdl-mixer-x/branches/master/builds/286

I tried the same build on Ubuntu 16.04 and then I tried to toggle Ubuntu version to 18.04 at Semaphore-Ci.
Comment 1 Ozkan Sezer 2020-11-12 08:30:43 UTC
I guess SDL_USE_LIBUDEV guards around MaybeRemoveDevice()
need removing.  Try the following patch.

diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c
--- a/src/joystick/linux/SDL_sysjoystick.c
+++ b/src/joystick/linux/SDL_sysjoystick.c
@@ -343,7 +343,6 @@ MaybeAddDevice(const char *path)
     return numjoysticks;
 }
 
-#if SDL_USE_LIBUDEV
 static int
 MaybeRemoveDevice(const char *path)
 {
@@ -386,7 +385,6 @@ MaybeRemoveDevice(const char *path)
 
     return -1;
 }
-#endif
 
 static void
 HandlePendingRemovals(void)
Comment 2 Ozkan Sezer 2020-11-12 11:13:32 UTC
Fixed by https://hg.libsdl.org/SDL/rev/f163fc05bd5c
Comment 3 Vitaly Novichkov 2020-11-12 11:21:40 UTC
Thanks!

At the same time, the mistake at SDL header:

```
include/SDL2/SDL_keycode.h:344:37: warning: comma at end of enumerator list [-Wpedantic]
     KMOD_GUI = KMOD_LGUI | KMOD_RGUI,
```
that breaks C90 compatibility
Comment 4 Ozkan Sezer 2020-11-12 12:10:53 UTC
(In reply to Vitaly Novichkov from comment #3)
> include/SDL2/SDL_keycode.h:344:37: warning: comma at end of enumerator list
> [-Wpedantic]
>      KMOD_GUI = KMOD_LGUI | KMOD_RGUI,

https://hg.libsdl.org/SDL/rev/cf742a3c038f
Comment 5 Vitaly Novichkov 2020-11-12 12:16:22 UTC
And then:
```
include/SDL2/SDL_gamecontroller.h:366:37: error: expected identifier before ‘/’ token
     SDL_CONTROLLER_BUTTON_MISC1,    // Xbox Series X share button, PS4/PS5 touchpad button, Nintendo Switch Pro capture button
```
Comment 6 Ozkan Sezer 2020-11-12 12:19:20 UTC
(In reply to Vitaly Novichkov from comment #5)
> And then:
> ```
> include/SDL2/SDL_gamecontroller.h:366:37: error: expected identifier before
> ‘/’ token
>      SDL_CONTROLLER_BUTTON_MISC1,    // Xbox Series X share button, PS4/PS5
> touchpad button, Nintendo Switch Pro capture button
> ```

Well, compile a list of any other enums with comma at the end
and open a bug entry here.  Otherwise you'll find others when-
ever we fix the one above.
Comment 7 Vitaly Novichkov 2020-11-12 12:21:13 UTC
I'll try that at evening, right now I am busy at my work, and I only trying to build the thing at Semaphore-CI that won't build because of those bugs here.