EasyRPG / Player

RPG Maker 2000/2003 and EasyRPG games interpreter
https://easyrpg.org/player/
GNU General Public License v3.0
965 stars 183 forks source link

Build fails due to needlessly adding libasound and libts via -lasound and -lts flags #3114

Closed ell1e closed 9 months ago

ell1e commented 9 months ago

The build of the latest dev version fails on my Linux system due to the Makefile inexplicably adding -lasound and -lts multiple times, and that even more weirdly breaking the build:

$ make VERBOSE=1
/usr/bin/cmake -S/home/user/Develop/EasyRPG-Player -B/home/user/Develop/EasyRPG-Player --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/user/Develop/EasyRPG-Player/CMakeFiles /home/user/Develop/EasyRPG-Player//CMakeFiles/progress.marks
make  -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/user/Develop/EasyRPG-Player'
make  -f CMakeFiles/EasyRPG_Player.dir/build.make CMakeFiles/EasyRPG_Player.dir/depend
make[2]: Entering directory '/home/user/Develop/EasyRPG-Player'
cd /home/user/Develop/EasyRPG-Player && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player/CMakeFiles/EasyRPG_Player.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/user/Develop/EasyRPG-Player'
make  -f CMakeFiles/EasyRPG_Player.dir/build.make CMakeFiles/EasyRPG_Player.dir/build
make[2]: Entering directory '/home/user/Develop/EasyRPG-Player'
make[2]: Nothing to be done for 'CMakeFiles/EasyRPG_Player.dir/build'.
make[2]: Leaving directory '/home/user/Develop/EasyRPG-Player'
[ 98%] Built target EasyRPG_Player
make  -f CMakeFiles/EasyRPG_Player_exe.dir/build.make CMakeFiles/EasyRPG_Player_exe.dir/depend
make[2]: Entering directory '/home/user/Develop/EasyRPG-Player'
cd /home/user/Develop/EasyRPG-Player && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player /home/user/Develop/EasyRPG-Player/CMakeFiles/EasyRPG_Player_exe.dir/DependInfo.cmake --color=
make[2]: Leaving directory '/home/user/Develop/EasyRPG-Player'
make  -f CMakeFiles/EasyRPG_Player_exe.dir/build.make CMakeFiles/EasyRPG_Player_exe.dir/build
make[2]: Entering directory '/home/user/Develop/EasyRPG-Player'
[ 98%] Linking CXX executable easyrpg-player
/usr/bin/cmake -E cmake_link_script CMakeFiles/EasyRPG_Player_exe.dir/link.txt --verbose=1
/usr/bin/c++ -g CMakeFiles/EasyRPG_Player_exe.dir/src/platform/sdl/main.cpp.o CMakeFiles/EasyRPG_Player.dir/src/lcf_data.cpp.o CMakeFiles/EasyRPG_Player.dir/src/async_handler.cpp.o CMakeFiles/EasyRPG_Player.dir/src/algo.cpp.o CMakeFiles/EasyRPG_Player.dir/src/attribute.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_decoder.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_decoder_base.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_decoder_midi.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_generic.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_generic_midiout.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_midi.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_resampler.cpp.o CMakeFiles/EasyRPG_Player.dir/src/audio_secache.cpp.o CMakeFiles/EasyRPG_Player.dir/src/autobattle.cpp.o CMakeFiles/EasyRPG_Player.dir/src/background.cpp.o CMakeFiles/EasyRPG_Player.dir/src/baseui.cpp.o CMakeFiles/EasyRPG_Player.dir/src/battle_animation.cpp.o CMakeFiles/EasyRPG_Player.dir/src/battle_message.cpp.o CMakeFiles/EasyRPG_Player.dir/src/bitmap.cpp.o CMakeFiles/EasyRPG_Player.dir/src/cache.cpp.o CMakeFiles/EasyRPG_Player.dir/src/cmdline_parser.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_fluidsynth.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_libsndfile.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_mpg123.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_oggvorbis.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_opus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_wildmidi.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_xmp.cpp.o CMakeFiles/EasyRPG_Player.dir/src/directory_tree.cpp.o CMakeFiles/EasyRPG_Player.dir/src/drawable.cpp.o CMakeFiles/EasyRPG_Player.dir/src/drawable_list.cpp.o CMakeFiles/EasyRPG_Player.dir/src/drawable_mgr.cpp.o CMakeFiles/EasyRPG_Player.dir/src/dynrpg.cpp.o CMakeFiles/EasyRPG_Player.dir/src/dynrpg_easyrpg.cpp.o CMakeFiles/EasyRPG_Player.dir/src/dynrpg_textplugin.cpp.o CMakeFiles/EasyRPG_Player.dir/src/enemyai.cpp.o CMakeFiles/EasyRPG_Player.dir/src/exe_reader.cpp.o CMakeFiles/EasyRPG_Player.dir/src/feature.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filefinder.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filefinder_rtp.cpp.o CMakeFiles/EasyRPG_Player.dir/src/fileext_guesser.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filesystem.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filesystem_native.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filesystem_root.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filesystem_stream.cpp.o CMakeFiles/EasyRPG_Player.dir/src/filesystem_zip.cpp.o CMakeFiles/EasyRPG_Player.dir/src/font.cpp.o CMakeFiles/EasyRPG_Player.dir/src/fps_overlay.cpp.o CMakeFiles/EasyRPG_Player.dir/src/frame.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_actor.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_actors.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_battlealgorithm.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_battle.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_battler.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_character.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_clock.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_commonevent.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_config.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_config_game.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_enemy.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_enemyparty.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_event.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_ineluki.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_interpreter_battle.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_interpreter_control_variables.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_interpreter.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_interpreter_map.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_map.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_message.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_party_base.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_party.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_pictures.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_player.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_quit.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_screen.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_switches.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_system.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_targets.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_variables.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_vehicle.cpp.o CMakeFiles/EasyRPG_Player.dir/src/game_windows.cpp.o CMakeFiles/EasyRPG_Player.dir/src/graphics.cpp.o CMakeFiles/EasyRPG_Player.dir/src/hslrgb.cpp.o CMakeFiles/EasyRPG_Player.dir/src/image_bmp.cpp.o CMakeFiles/EasyRPG_Player.dir/src/image_png.cpp.o CMakeFiles/EasyRPG_Player.dir/src/image_xyz.cpp.o CMakeFiles/EasyRPG_Player.dir/src/input_buttons_desktop.cpp.o CMakeFiles/EasyRPG_Player.dir/src/input.cpp.o CMakeFiles/EasyRPG_Player.dir/src/input_source.cpp.o CMakeFiles/EasyRPG_Player.dir/src/instrumentation.cpp.o CMakeFiles/EasyRPG_Player.dir/src/main_data.cpp.o CMakeFiles/EasyRPG_Player.dir/src/maniac_patch.cpp.o CMakeFiles/EasyRPG_Player.dir/src/message_overlay.cpp.o CMakeFiles/EasyRPG_Player.dir/src/meta.cpp.o CMakeFiles/EasyRPG_Player.dir/src/midisequencer.cpp.o CMakeFiles/EasyRPG_Player.dir/src/output.cpp.o CMakeFiles/EasyRPG_Player.dir/src/pending_message.cpp.o CMakeFiles/EasyRPG_Player.dir/src/plane.cpp.o CMakeFiles/EasyRPG_Player.dir/src/platform.cpp.o CMakeFiles/EasyRPG_Player.dir/src/player.cpp.o CMakeFiles/EasyRPG_Player.dir/src/rand.cpp.o CMakeFiles/EasyRPG_Player.dir/src/rect.cpp.o CMakeFiles/EasyRPG_Player.dir/src/registry_wine.cpp.o CMakeFiles/EasyRPG_Player.dir/src/rtp.cpp.o CMakeFiles/EasyRPG_Player.dir/src/rtp_table.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_actortarget.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_battle.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_battle_rpg2k3.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_battle_rpg2k.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_debug.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_end.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_equip.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_file.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_gamebrowser.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_gameover.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_import.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_item.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_load.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_logo.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_map.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_menu.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_name.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_order.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_save.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_shop.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_skill.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_status.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_settings.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_teleport.cpp.o CMakeFiles/EasyRPG_Player.dir/src/scene_title.cpp.o CMakeFiles/EasyRPG_Player.dir/src/screen.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_airshipshadow.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_actor.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_battler.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_enemy.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_character.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_picture.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_weapon.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite.cpp.o CMakeFiles/EasyRPG_Player.dir/src/spriteset_battle.cpp.o CMakeFiles/EasyRPG_Player.dir/src/spriteset_map.cpp.o CMakeFiles/EasyRPG_Player.dir/src/sprite_timer.cpp.o CMakeFiles/EasyRPG_Player.dir/src/state.cpp.o CMakeFiles/EasyRPG_Player.dir/src/string_view.cpp.o CMakeFiles/EasyRPG_Player.dir/src/text.cpp.o CMakeFiles/EasyRPG_Player.dir/src/tilemap.cpp.o CMakeFiles/EasyRPG_Player.dir/src/tilemap_layer.cpp.o CMakeFiles/EasyRPG_Player.dir/src/transition.cpp.o CMakeFiles/EasyRPG_Player.dir/src/translation.cpp.o CMakeFiles/EasyRPG_Player.dir/src/utils.cpp.o CMakeFiles/EasyRPG_Player.dir/src/version.cpp.o CMakeFiles/EasyRPG_Player.dir/src/weather.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_about.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_actorinfo.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_actorsp.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_actorstatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_actortarget.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_base.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_battlecommand.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_battlemessage.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_battlestatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_command.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_command_horizontal.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_equip.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_equipitem.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_equipstatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_face.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_gamelist.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_gold.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_help.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_import_progress.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_input_settings.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_item.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_keyboard.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_menustatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_message.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_name.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_numberinput.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_paramstatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_savefile.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_selectable.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_settings.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_shopbuy.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_shop.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_shopnumber.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_shopparty.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_shopsell.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_shopstatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_skill.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_skillstatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_targetstatus.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_teleport.cpp.o CMakeFiles/EasyRPG_Player.dir/src/window_varlist.cpp.o CMakeFiles/EasyRPG_Player.dir/src/platform/sdl/audio.cpp.o CMakeFiles/EasyRPG_Player.dir/src/platform/sdl/sdl2_ui.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_fmmidi.cpp.o CMakeFiles/EasyRPG_Player.dir/src/midisynth.cpp.o CMakeFiles/EasyRPG_Player.dir/src/decoder_drwav.cpp.o -o easyrpg-player  /usr/lib64/libSDL2.so -lm -ldl -lasound -lm -ldl -lasound -lpthread -lts -lpthread -lts -lrt /usr/lib64/liblcf.so /usr/lib64/libpng.so /usr/lib64/libz.so /usr/lib64/libfmt.so.8.0.1 -Wl,--as-needed /usr/lib64/libpixman-1.so /usr/lib64/libfreetype.so /usr/lib64/libspeexdsp.so /usr/lib64/libmpg123.so /usr/lib64/libsndfile.so /usr/lib64/libvorbisfile.so /usr/lib64/libvorbis.so /usr/lib64/libogg.so /usr/lib64/libWildMidi.so.2.1.0 -Wl,--no-undefined -lm 
/usr/lib64/gcc/x86_64-suse-linux/12/../../../../x86_64-suse-linux/bin/ld: cannot find -lasound: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/EasyRPG_Player_exe.dir/build.make:512: easyrpg-player] Error 1
make[2]: Leaving directory '/home/user/Develop/EasyRPG-Player'
make[1]: *** [CMakeFiles/Makefile2:166: CMakeFiles/EasyRPG_Player_exe.dir/all] Error 2
make[1]: Leaving directory '/home/user/Develop/EasyRPG-Player'
make: *** [Makefile:136: all] Error 2
$

Now the absurd thing is, if I just copy and paste the final build command while removing -lasound and -lts flags, there is no problem. So I don't think they should be there in the first place, it seems to be some problem with the cmake script.

Ghabry commented 9 months ago

The linker flags for alsa come from pkgconfig. So they should be correct if your distribution didn't mess something up.

Can you check the output of it? I'm not at a Linux system right now to check. Think the command was pkgconfig --cflags --lib alsa (or pretty close to this).

Also check if you can find the libraries on your system and where they are located.

ell1e commented 9 months ago

Hm I couldn't quite get it to print out anything useful:

$ pkg-config --cflags --libs alsa
Package alsa was not found in the pkg-config search path.
Perhaps you should add the directory containing `alsa.pc'
to the PKG_CONFIG_PATH environment variable
No package 'alsa' found
$ pkg-config --cflags --libs asound
Package asound was not found in the pkg-config search path.
Perhaps you should add the directory containing `asound.pc'
to the PKG_CONFIG_PATH environment variable
No package 'asound' found
$ pkg-config --cflags --libs asound2
Package asound2 was not found in the pkg-config search path.
Perhaps you should add the directory containing `asound2.pc'
to the PKG_CONFIG_PATH environment variable
No package 'asound2' found
$ pkg-config --cflags --libs libalsa
Package libalsa was not found in the pkg-config search path.
Perhaps you should add the directory containing `libalsa.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libalsa' found
$
Ghabry commented 9 months ago

Booted now my Linux to check this:

> pkg-config --cflags alsa

> pkg-config --cflags --libs alsa
-lasound 

> pkg-config --static --cflags --libs alsa
-lasound -lm -lpthread -lrt 

So you don't have ALSA installed? How do you play sound on your system?


Though considering that it is not installed I wonder where these library names are coming from.

Maybe one if the other dependencies pulls it in? The only one I can think of is SDL2. 🤔


configure and cmake print a summary after the configuration step. Just to check if ALSA was detected or not:

ell1e commented 9 months ago

ALSA is installed, there's libasound2 in /usr/lib64 and all the usual. This is what the EasyRPG cmake feature section gives me:

-- Target system: SDL2
-- 
-- Audio backend: SDL2
-- 
-- WAV playback: built-in (dr_wav);libsndfile
-- MIDI playback: WildMidi;built-in (FmMidi)
-- MP3 playback: mpg123
-- Ogg Vorbis playback: libvorbis
-- MOD playback: None
-- Opus playback: None
-- Resampler: speexdsp
-- 
-- Font rendering: Freetype and built-in
Ghabry commented 9 months ago

okay this means that ALSA was not detected (because there is no pkg-config file). No idea why your distribution doesn't ship one.

Though that still doesn't explain where -lasound is coming from if you don't even have this library.

Guess to figure this out I have to install the distribution you use :/.


Right now I can only guess. You are the first one with this issue:

Search in /usr/lib/pkgconfig and /usr/lib64/pkgconfig for lasound if there is any library that lists this one as a dependency.

When building with CMake you can also try -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=OFF when configuring (delete CMakeCache.txt first!). This will use our own CMake find scripts instead of the systemwide config files to find the dependencies.

Ghabry commented 9 months ago

ooh. Reminder from fdelapena in the chat:

When your distribution provides development packages check that you have the corresponding -dev or -devel header for ALSA installed.

fdelapena commented 9 months ago

On deb distros, libasound2-dev. On rpm distros, alsa-lib-devel usually.

ell1e commented 9 months ago

So I assumed the devel package was installed because the headers were present. As were the .so files. But for some absurd reason I don't understand, on this OpenSUSE install the way they packaged it apparently it wasn't, and installing it made the already present headers and already present libraries suddenly work for linking...?

Don't ask me, I don't understand it :laughing: but in any case, yeah, my bad. It's not a cmake problem, I lacked alsa-devel.