solarus 1.6.5 linking error missing -ldl?
On openSUSE Tumbleweed (20210401), solarus 1.6.5 fails to build at link time with this error:
[ 357s] [ 79%] Linking CXX shared library libsolarus.so
[ 357s] /usr/bin/cmake -E cmake_link_script CMakeFiles/solarus.dir/link.txt --verbose=1
[ 357s] /usr/bin/c++ -fPIC -std=c++0x -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -Werror=return-type -flto=auto -g -DNDEBUG -O2 -g -DNDEBUG -flto=auto -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now -shared -Wl,-soname,libsolarus.so.1 -o libsolarus.so.1.6.5 CMakeFiles/solarus.dir/src/audio/ItDecoder.cpp.o CMakeFiles/solarus.dir/src/audio/Music.cpp.o CMakeFiles/solarus.dir/src/audio/OggDecoder.cpp.o CMakeFiles/solarus.dir/src/audio/Sound.cpp.o CMakeFiles/solarus.dir/src/audio/SpcDecoder.cpp.o CMakeFiles/solarus.dir/src/core/AbilityInfo.cpp.o CMakeFiles/solarus.dir/src/core/Arguments.cpp.o CMakeFiles/solarus.dir/src/core/CommandsEffects.cpp.o CMakeFiles/solarus.dir/src/core/CurrentQuest.cpp.o CMakeFiles/solarus.dir/src/core/Debug.cpp.o CMakeFiles/solarus.dir/src/core/DialogBoxSystem.cpp.o CMakeFiles/solarus.dir/src/core/Dialog.cpp.o CMakeFiles/solarus.dir/src/core/DialogResources.cpp.o CMakeFiles/solarus.dir/src/core/Equipment.cpp.o CMakeFiles/solarus.dir/src/core/EquipmentItem.cpp.o CMakeFiles/solarus.dir/src/core/EquipmentItemUsage.cpp.o CMakeFiles/solarus.dir/src/core/FontResource.cpp.o CMakeFiles/solarus.dir/src/core/GameCommands.cpp.o CMakeFiles/solarus.dir/src/core/Game.cpp.o CMakeFiles/solarus.dir/src/core/Geometry.cpp.o CMakeFiles/solarus.dir/src/core/InputEvent.cpp.o CMakeFiles/solarus.dir/src/core/Logger.cpp.o CMakeFiles/solarus.dir/src/core/MainLoop.cpp.o CMakeFiles/solarus.dir/src/core/Map.cpp.o CMakeFiles/solarus.dir/src/core/MapData.cpp.o CMakeFiles/solarus.dir/src/core/PerfCounter.cpp.o CMakeFiles/solarus.dir/src/core/PixelBits.cpp.o CMakeFiles/solarus.dir/src/core/Point.cpp.o CMakeFiles/solarus.dir/src/core/QuestDatabase.cpp.o CMakeFiles/solarus.dir/src/core/QuestFiles.cpp.o CMakeFiles/solarus.dir/src/core/QuestProperties.cpp.o CMakeFiles/solarus.dir/src/core/Random.cpp.o CMakeFiles/solarus.dir/src/core/Rectangle.cpp.o CMakeFiles/solarus.dir/src/core/ResourceProvider.cpp.o CMakeFiles/solarus.dir/src/core/SavegameConverterV1.cpp.o CMakeFiles/solarus.dir/src/core/Savegame.cpp.o CMakeFiles/solarus.dir/src/core/Settings.cpp.o CMakeFiles/solarus.dir/src/core/Size.cpp.o CMakeFiles/solarus.dir/src/core/SolarusFatal.cpp.o CMakeFiles/solarus.dir/src/core/String.cpp.o CMakeFiles/solarus.dir/src/core/StringResources.cpp.o CMakeFiles/solarus.dir/src/core/System.cpp.o CMakeFiles/solarus.dir/src/core/Timer.cpp.o CMakeFiles/solarus.dir/src/core/Treasure.cpp.o CMakeFiles/solarus.dir/src/entities/AnimatedTilePattern.cpp.o CMakeFiles/solarus.dir/src/entities/Arrow.cpp.o CMakeFiles/solarus.dir/src/entities/Block.cpp.o CMakeFiles/solarus.dir/src/entities/Bomb.cpp.o CMakeFiles/solarus.dir/src/entities/Boomerang.cpp.o CMakeFiles/solarus.dir/src/entities/BorderSet.cpp.o CMakeFiles/solarus.dir/src/entities/Camera.cpp.o CMakeFiles/solarus.dir/src/entities/CarriedObject.cpp.o CMakeFiles/solarus.dir/src/entities/Chest.cpp.o CMakeFiles/solarus.dir/src/entities/CollisionMode.cpp.o CMakeFiles/solarus.dir/src/entities/CrystalBlock.cpp.o CMakeFiles/solarus.dir/src/entities/Crystal.cpp.o CMakeFiles/solarus.dir/src/entities/CustomEntity.cpp.o CMakeFiles/solarus.dir/src/entities/Destination.cpp.o CMakeFiles/solarus.dir/src/entities/Destructible.cpp.o CMakeFiles/solarus.dir/src/entities/Door.cpp.o CMakeFiles/solarus.dir/src/entities/DynamicTile.cpp.o CMakeFiles/solarus.dir/src/entities/Enemy.cpp.o CMakeFiles/solarus.dir/src/entities/EnemyReaction.cpp.o CMakeFiles/solarus.dir/src/entities/Entities.cpp.o CMakeFiles/solarus.dir/src/entities/Entity.cpp.o CMakeFiles/solarus.dir/src/entities/EntityData.cpp.o CMakeFiles/solarus.dir/src/entities/EntityState.cpp.o CMakeFiles/solarus.dir/src/entities/EntityTypeInfo.cpp.o CMakeFiles/solarus.dir/src/entities/Explosion.cpp.o CMakeFiles/solarus.dir/src/entities/Fire.cpp.o CMakeFiles/solarus.dir/src/entities/GroundInfo.cpp.o CMakeFiles/solarus.dir/src/entities/Hero.cpp.o CMakeFiles/solarus.dir/src/entities/Hookshot.cpp.o CMakeFiles/solarus.dir/src/entities/Jumper.cpp.o CMakeFiles/solarus.dir/src/entities/NonAnimatedRegions.cpp.o CMakeFiles/solarus.dir/src/entities/Npc.cpp.o CMakeFiles/solarus.dir/src/entities/ParallaxScrollingTilePattern.cpp.o CMakeFiles/solarus.dir/src/entities/Pickable.cpp.o CMakeFiles/solarus.dir/src/entities/SelfScrollingTilePattern.cpp.o CMakeFiles/solarus.dir/src/entities/Sensor.cpp.o CMakeFiles/solarus.dir/src/entities/Separator.cpp.o CMakeFiles/solarus.dir/src/entities/ShopTreasure.cpp.o CMakeFiles/solarus.dir/src/entities/SimpleTilePattern.cpp.o CMakeFiles/solarus.dir/src/entities/Stairs.cpp.o CMakeFiles/solarus.dir/src/entities/StartingLocationMode.cpp.o CMakeFiles/solarus.dir/src/entities/StreamAction.cpp.o CMakeFiles/solarus.dir/src/entities/Stream.cpp.o CMakeFiles/solarus.dir/src/entities/Switch.cpp.o CMakeFiles/solarus.dir/src/entities/Teletransporter.cpp.o CMakeFiles/solarus.dir/src/entities/Tile.cpp.o CMakeFiles/solarus.dir/src/entities/TilePattern.cpp.o CMakeFiles/solarus.dir/src/entities/Tileset.cpp.o CMakeFiles/solarus.dir/src/entities/TilesetData.cpp.o CMakeFiles/solarus.dir/src/entities/TraversableInfo.cpp.o CMakeFiles/solarus.dir/src/entities/Wall.cpp.o CMakeFiles/solarus.dir/src/graphics/BlendModeInfo.cpp.o CMakeFiles/solarus.dir/src/graphics/Color.cpp.o CMakeFiles/solarus.dir/src/graphics/Drawable.cpp.o CMakeFiles/solarus.dir/src/graphics/glrenderer/GlRenderer.cpp.o CMakeFiles/solarus.dir/src/graphics/glrenderer/GlShader.cpp.o CMakeFiles/solarus.dir/src/graphics/glrenderer/GlTexture.cpp.o CMakeFiles/solarus.dir/src/graphics/Hq2xFilter.cpp.o CMakeFiles/solarus.dir/src/graphics/Hq3xFilter.cpp.o CMakeFiles/solarus.dir/src/graphics/Hq4xFilter.cpp.o CMakeFiles/solarus.dir/src/graphics/Renderer.cpp.o CMakeFiles/solarus.dir/src/graphics/Scale2xFilter.cpp.o CMakeFiles/solarus.dir/src/graphics/sdlrenderer/SDLRenderer.cpp.o CMakeFiles/solarus.dir/src/graphics/sdlrenderer/SDLShader.cpp.o CMakeFiles/solarus.dir/src/graphics/sdlrenderer/SDLSurfaceImpl.cpp.o CMakeFiles/solarus.dir/src/graphics/Shader.cpp.o CMakeFiles/solarus.dir/src/graphics/ShaderData.cpp.o CMakeFiles/solarus.dir/src/graphics/SoftwarePixelFilter.cpp.o CMakeFiles/solarus.dir/src/graphics/SoftwareVideoMode.cpp.o CMakeFiles/solarus.dir/src/graphics/SpriteAnimation.cpp.o CMakeFiles/solarus.dir/src/graphics/SpriteAnimationDirection.cpp.o CMakeFiles/solarus.dir/src/graphics/SpriteAnimationSet.cpp.o CMakeFiles/solarus.dir/src/graphics/Sprite.cpp.o CMakeFiles/solarus.dir/src/graphics/SpriteData.cpp.o CMakeFiles/solarus.dir/src/graphics/Surface.cpp.o CMakeFiles/solarus.dir/src/graphics/SurfaceImpl.cpp.o CMakeFiles/solarus.dir/src/graphics/TextSurface.cpp.o CMakeFiles/solarus.dir/src/graphics/Transition.cpp.o CMakeFiles/solarus.dir/src/graphics/TransitionFade.cpp.o CMakeFiles/solarus.dir/src/graphics/TransitionImmediate.cpp.o CMakeFiles/solarus.dir/src/graphics/TransitionScrolling.cpp.o CMakeFiles/solarus.dir/src/graphics/VertexArray.cpp.o CMakeFiles/solarus.dir/src/graphics/Video.cpp.o CMakeFiles/solarus.dir/src/hero/BackToSolidGroundState.cpp.o CMakeFiles/solarus.dir/src/hero/BoomerangState.cpp.o CMakeFiles/solarus.dir/src/hero/BowState.cpp.o CMakeFiles/solarus.dir/src/hero/CarryingState.cpp.o CMakeFiles/solarus.dir/src/hero/CustomState.cpp.o CMakeFiles/solarus.dir/src/hero/FallingState.cpp.o CMakeFiles/solarus.dir/src/hero/ForcedWalkingState.cpp.o CMakeFiles/solarus.dir/src/hero/FreeState.cpp.o CMakeFiles/solarus.dir/src/hero/FrozenState.cpp.o CMakeFiles/solarus.dir/src/hero/GrabbingState.cpp.o CMakeFiles/solarus.dir/src/hero/HeroSprites.cpp.o CMakeFiles/solarus.dir/src/hero/HeroState.cpp.o CMakeFiles/solarus.dir/src/hero/HookshotState.cpp.o CMakeFiles/solarus.dir/src/hero/HurtState.cpp.o CMakeFiles/solarus.dir/src/hero/JumpingState.cpp.o CMakeFiles/solarus.dir/src/hero/LiftingState.cpp.o CMakeFiles/solarus.dir/src/hero/PlayerMovementState.cpp.o CMakeFiles/solarus.dir/src/hero/PlungingState.cpp.o CMakeFiles/solarus.dir/src/hero/PullingState.cpp.o CMakeFiles/solarus.dir/src/hero/PushingState.cpp.o CMakeFiles/solarus.dir/src/hero/RunningState.cpp.o CMakeFiles/solarus.dir/src/hero/SpinAttackState.cpp.o CMakeFiles/solarus.dir/src/hero/StairsState.cpp.o CMakeFiles/solarus.dir/src/hero/SwimmingState.cpp.o CMakeFiles/solarus.dir/src/hero/SwordLoadingState.cpp.o CMakeFiles/solarus.dir/src/hero/SwordSwingingState.cpp.o CMakeFiles/solarus.dir/src/hero/SwordTappingState.cpp.o CMakeFiles/solarus.dir/src/hero/TreasureState.cpp.o CMakeFiles/solarus.dir/src/hero/UsingItemState.cpp.o CMakeFiles/solarus.dir/src/hero/VictoryState.cpp.o CMakeFiles/solarus.dir/src/lua/AudioApi.cpp.o CMakeFiles/solarus.dir/src/lua/DrawableApi.cpp.o CMakeFiles/solarus.dir/src/lua/EntityApi.cpp.o CMakeFiles/solarus.dir/src/lua/ExportableToLua.cpp.o CMakeFiles/solarus.dir/src/lua/FileApi.cpp.o CMakeFiles/solarus.dir/src/lua/GameApi.cpp.o CMakeFiles/solarus.dir/src/lua/InputApi.cpp.o CMakeFiles/solarus.dir/src/lua/ItemApi.cpp.o CMakeFiles/solarus.dir/src/lua/LanguageApi.cpp.o CMakeFiles/solarus.dir/src/lua/LuaContext.cpp.o CMakeFiles/solarus.dir/src/lua/LuaData.cpp.o CMakeFiles/solarus.dir/src/lua/LuaException.cpp.o CMakeFiles/solarus.dir/src/lua/LuaTools.cpp.o CMakeFiles/solarus.dir/src/lua/MainApi.cpp.o CMakeFiles/solarus.dir/src/lua/MapApi.cpp.o CMakeFiles/solarus.dir/src/lua/MenuApi.cpp.o CMakeFiles/solarus.dir/src/lua/MovementApi.cpp.o CMakeFiles/solarus.dir/src/lua/ScopedLuaRef.cpp.o CMakeFiles/solarus.dir/src/lua/ShaderApi.cpp.o CMakeFiles/solarus.dir/src/lua/SpriteApi.cpp.o CMakeFiles/solarus.dir/src/lua/StateApi.cpp.o CMakeFiles/solarus.dir/src/lua/SurfaceApi.cpp.o CMakeFiles/solarus.dir/src/lua/TextSurfaceApi.cpp.o CMakeFiles/solarus.dir/src/lua/TimerApi.cpp.o CMakeFiles/solarus.dir/src/lua/VideoApi.cpp.o CMakeFiles/solarus.dir/src/movements/CircleMovement.cpp.o CMakeFiles/solarus.dir/src/movements/FallingOnFloorMovement.cpp.o CMakeFiles/solarus.dir/src/movements/JumpMovement.cpp.o CMakeFiles/solarus.dir/src/movements/Movement.cpp.o CMakeFiles/solarus.dir/src/movements/PathFinding.cpp.o CMakeFiles/solarus.dir/src/movements/PathFindingMovement.cpp.o CMakeFiles/solarus.dir/src/movements/PathMovement.cpp.o CMakeFiles/solarus.dir/src/movements/PixelMovement.cpp.o CMakeFiles/solarus.dir/src/movements/PlayerMovement.cpp.o CMakeFiles/solarus.dir/src/movements/RandomMovement.cpp.o CMakeFiles/solarus.dir/src/movements/RandomPathMovement.cpp.o CMakeFiles/solarus.dir/src/movements/RelativeMovement.cpp.o CMakeFiles/solarus.dir/src/movements/StraightMovement.cpp.o CMakeFiles/solarus.dir/src/movements/TargetMovement.cpp.o CMakeFiles/solarus.dir/src/third_party/glad/glad.c.o CMakeFiles/solarus.dir/src/third_party/hqx/hq2x.c.o CMakeFiles/solarus.dir/src/third_party/hqx/hq3x.c.o CMakeFiles/solarus.dir/src/third_party/hqx/hq4x.c.o CMakeFiles/solarus.dir/src/third_party/hqx/init.c.o CMakeFiles/solarus.dir/src/third_party/snes_spc/dsp.cpp.o CMakeFiles/solarus.dir/src/third_party/snes_spc/SNES_SPC.cpp.o CMakeFiles/solarus.dir/src/third_party/snes_spc/SNES_SPC_misc.cpp.o CMakeFiles/solarus.dir/src/third_party/snes_spc/SNES_SPC_state.cpp.o CMakeFiles/solarus.dir/src/third_party/snes_spc/spc.cpp.o CMakeFiles/solarus.dir/src/third_party/snes_spc/SPC_DSP.cpp.o CMakeFiles/solarus.dir/src/third_party/snes_spc/SPC_Filter.cpp.o /usr/lib64/libSDL2.so /usr/lib64/libSDL2_image.so /usr/lib64/libSDL2_ttf.so /usr/lib64/libopenal.so /usr/lib64/libphysfs.so /usr/lib64/libvorbis.so /usr/lib64/libvorbisfile.so /usr/lib64/libogg.so /usr/lib64/libmodplug.so /usr/lib64/libluajit-5.1.so /usr/lib64/libSDL2.so -lpthread /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so
[ 357s] /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: /tmp/libsolarus.so.1.6.5.PW9woN.ltrans51.ltrans.o: in function `gladLoadGL':
[ 357s] /home/abuild/rpmbuild/BUILD/solarus-1.6.5/src/third_party/glad/glad.c:103: undefined reference to `dlopen'
[ 357s] /usr/lib6: [build.log](/uploads/4c18d2820fcfcfbff5d9bc583bd6f767/build.log)/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: /tmp/libsolarus.so.1.6.5.PW9woN.ltrans51.ltrans.o:/home/abuild/rpmbuild/BUILD/solarus-1.6.5/src/third_party/glad/glad.c:103: undefined reference to `dlopen'
[ 357s] /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: /tmp/libsolarus.so.1.6.5.PW9woN.ltrans51.ltrans.o:/home/abuild/rpmbuild/BUILD/solarus-1.6.5/src/third_party/glad/glad.c:109: undefined reference to `dlsym'
[ 357s] /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: /tmp/libsolarus.so.1.6.5.PW9woN.ltrans51.ltrans.o: in function `gladLoadGL':
[ 357s] /home/abuild/rpmbuild/BUILD/solarus-1.6.5/src/third_party/glad/glad.c:122: undefined reference to `dlclose'
[ 357s] /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: /tmp/libsolarus.so.1.6.5.PW9woN.ltrans51.ltrans.o: in function `get_proc':
[ 357s] /home/abuild/rpmbuild/BUILD/solarus-1.6.5/src/third_party/glad/glad.c:142: undefined reference to `dlsym'
[ 357s] collect2: error: ld returned 1 exit status
[ 357s] make[2]: *** [CMakeFiles/solarus.dir/build.make:3224: libsolarus.so.1.6.5] Error 1
[ 357s] make[2]: Leaving directory '/home/abuild/rpmbuild/BUILD/solarus-1.6.5/build'
[ 357s] make[1]: *** [CMakeFiles/Makefile2:250: CMakeFiles/solarus.dir/all] Error 2
[ 357s] make: *** [Makefile:163: all] Error 2
[ 357s] error: Bad exit status from /var/tmp/rpm-tmp.BWb4h2 (%build)
Full build log: build.log. Spec file: solarus.spec.
Adding ${CMAKE_DL_LIBS}
to target_link_libraries
in AddSolarusLibrary.cmake
workarounds the issue.
Edited by Antoine Belvire