failed to find reference for libvorbis when compiling for my port of a godot module from 3.5 into 4.0

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By LeeGodSRC

Hello, I’m trying to port a module called shinobu from godot 3.5 into godot 4 for my game.
But for some reason I’m receiving the error:
undefined reference to `ov_pcm_total'

It seems to failed to load the thirdparty library libvorbis when compiling.
I didn’t manage to solve it due to my lack of understanding about C++ and modules;-;
If you can help me out I’d be appreciated!

Original module on 3.5: https://github.com/EIRTeam/godot/tree/0.16/modules/shinobu
My port on 4.0: https://github.com/LeeGodSRC/godot/blob/master/modules/shinobu
Full error: Imanity Paste

:bust_in_silhouette: Reply From: limor

Hi Lee I just came across this post after spending a while doing similar modifications to the code as you did.

I managed to solve the linker issue by changing the order of libvorbis on the linker command line
To see the full loader command line add verbose=yes

scons platform=linuxbsd verbose=yes 

And this is what the loader command line looks like with libvorbis added again at the end. The binary worked and the classes were registered and appear in the GDscript code completion suggestions. Haven’t tested the miniaudio functions yet.

g++ -o bin/godot.linuxbsd.editor.x86_64 -static-libgcc -static-libstdc++ -s platform/linuxbsd/godot_linuxbsd.linuxbsd.editor.x86_64.o platform/linuxbsd/crash_handler_linuxbsd.linuxbsd.editor.x86_64.o platform/linuxbsd/os_linuxbsd.linuxbsd.editor.x86_64.o platform/linuxbsd/joypad_linux.linuxbsd.editor.x86_64.o platform/linuxbsd/freedesktop_portal_desktop.linuxbsd.editor.x86_64.o platform/linuxbsd/freedesktop_screensaver.linuxbsd.editor.x86_64.o platform/linuxbsd/xkbcommon-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/display_server_x11.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/key_mapping_x11.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xlib-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xcursor-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xinerama-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xinput2-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xrandr-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xrender-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/dynwrappers/xext-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/vulkan_context_x11.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/gl_manager_x11.linuxbsd.editor.x86_64.o platform/linuxbsd/x11/detect_prime_x11.linuxbsd.editor.x86_64.o thirdparty/glad/glx.linuxbsd.editor.x86_64.o platform/linuxbsd/tts_linux.linuxbsd.editor.x86_64.o platform/linuxbsd/speechd-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/fontconfig-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/libudev-so_wrap.linuxbsd.editor.x86_64.o platform/linuxbsd/dbus-so_wrap.linuxbsd.editor.x86_64.o main/libmain.linuxbsd.editor.x86_64.a modules/libmodules.linuxbsd.editor.x86_64.a modules/libmodule_msdfgen.linuxbsd.editor.x86_64.a modules/libmodule_theora.linuxbsd.editor.x86_64.a modules/libmodule_vorbis.linuxbsd.editor.x86_64.a modules/libmodule_astcenc.linuxbsd.editor.x86_64.a modules/libmodule_basis_universal.linuxbsd.editor.x86_64.a modules/libmodule_bmp.linuxbsd.editor.x86_64.a modules/libmodule_csg.linuxbsd.editor.x86_64.a modules/libmodule_cvtt.linuxbsd.editor.x86_64.a modules/libmodule_dds.linuxbsd.editor.x86_64.a modules/libmodule_denoise.linuxbsd.editor.x86_64.a modules/libmodule_enet.linuxbsd.editor.x86_64.a modules/libmodule_etcpak.linuxbsd.editor.x86_64.a modules/libmodule_freetype.linuxbsd.editor.x86_64.a modules/libmodule_gdscript.linuxbsd.editor.x86_64.a modules/libmodule_glslang.linuxbsd.editor.x86_64.a modules/libmodule_gltf.linuxbsd.editor.x86_64.a modules/libmodule_gridmap.linuxbsd.editor.x86_64.a modules/libmodule_hdr.linuxbsd.editor.x86_64.a modules/libmodule_jpg.linuxbsd.editor.x86_64.a modules/libmodule_jsonrpc.linuxbsd.editor.x86_64.a modules/libmodule_lightmapper_rd.linuxbsd.editor.x86_64.a modules/libmodule_mbedtls.linuxbsd.editor.x86_64.a modules/libmodule_meshoptimizer.linuxbsd.editor.x86_64.a modules/libmodule_minimp3.linuxbsd.editor.x86_64.a modules/libmodule_mobile_vr.linuxbsd.editor.x86_64.a modules/libmodule_multiplayer.linuxbsd.editor.x86_64.a modules/libmodule_navigation.linuxbsd.editor.x86_64.a modules/libmodule_noise.linuxbsd.editor.x86_64.a modules/libmodule_ogg.linuxbsd.editor.x86_64.a modules/libmodule_openxr.linuxbsd.editor.x86_64.a modules/libmodule_raycast.linuxbsd.editor.x86_64.a modules/libmodule_regex.linuxbsd.editor.x86_64.a modules/libmodule_shinobu.linuxbsd.editor.x86_64.a modules/libmodule_squish.linuxbsd.editor.x86_64.a modules/libmodule_svg.linuxbsd.editor.x86_64.a modules/libmodule_text_server_adv.linuxbsd.editor.x86_64.a modules/libmodule_tga.linuxbsd.editor.x86_64.a modules/libmodule_tinyexr.linuxbsd.editor.x86_64.a modules/libmodule_upnp.linuxbsd.editor.x86_64.a modules/libmodule_vhacd.linuxbsd.editor.x86_64.a modules/libmodule_webp.linuxbsd.editor.x86_64.a modules/libmodule_webrtc.linuxbsd.editor.x86_64.a modules/libmodule_websocket.linuxbsd.editor.x86_64.a modules/libmodule_webxr.linuxbsd.editor.x86_64.a modules/libmodule_xatlas_unwrap.linuxbsd.editor.x86_64.a modules/libmodule_zip.linuxbsd.editor.x86_64.a platform/libplatform.linuxbsd.editor.x86_64.a drivers/libdrivers.linuxbsd.editor.x86_64.a editor/libeditor.linuxbsd.editor.x86_64.a scene/libscene.linuxbsd.editor.x86_64.a servers/libservers.linuxbsd.editor.x86_64.a core/libcore.linuxbsd.editor.x86_64.a modules/text_server_adv/libharfbuzz_builtin.linuxbsd.editor.x86_64.a modules/text_server_adv/libgraphite_builtin.linuxbsd.editor.x86_64.a modules/text_server_adv/libicu_builtin.linuxbsd.editor.x86_64.a modules/freetype/libfreetype_builtin.linuxbsd.editor.x86_64.a modules/msdfgen/libmsdfgen_builtin.linuxbsd.editor.x86_64.a -lpthread -ldl modules/libmodule_vorbis.linuxbsd.editor.x86_64.a

It would be great to find out why the symbols are not read by the linker in the original order
BTW why did you comment out ShinobuSoundSource and ShinobuEffect classes in register_types.cpp ? They somehow do appear in the editor code completion menus.