Almamu / linux-wallpaperengine

Wallpaper Engine backgrounds for Linux!
GNU General Public License v3.0
1.64k stars 61 forks source link

Does not work after updated ffmpge package #229

Closed DI-HUO-MING-YI closed 3 months ago

DI-HUO-MING-YI commented 3 months ago

I use archlinux, and I updated the package ffmpge. and I get the error: ./linux-wallpaperengine: error while loading shared libraries: libavcodec.so.60: cannot open shared object file: No such file or directory

And, I can only find libavcodec.so.61 in /usr/lib

fieryhenry commented 3 months ago

I ran into this same issue, you need to rebuild the project. In my case running the cmake .. and make commands in the build directory again led to this error:

./linux-wallpaperengine/src/WallpaperEngine/Audio/CAudioStream.h:197:9: error: ‘AVFifoBuffer’ does not name a type; did you mean ‘AVBuffer’?
  197 |         AVFifoBuffer* packetList;
      |         ^~~~~~~~~~~~
      |         AVBuffer

This is fixed if you add

add_compile_definitions(FF_API_FIFO_OLD_API=1)
add_compile_definitions(FF_API_OLD_CHANNEL_LAYOUT=1)

in the CMakeLists.txt file. I'm not an expert in cmake or ffmepg or this project so that might be a terrible solution that has negative impacts, but it seems to build ok.

Although when I now run it, I get an eglGetPlatformDisplayEXT failed! message which is probably a completely different issue

fieryhenry commented 3 months ago

Just tested running inside a window and that works, so it seems like a display issue

fieryhenry commented 3 months ago

I managed to fix it by replacing OPENGL_egl_LIBRARY with EGL in the CMakeLists.txt file:

if (WAYLAND_SUPPORT_FOUND)
    target_link_libraries(linux-wallpaperengine PUBLIC
        pthread
        wayland-cursor
        wayland-client
        wayland-egl
        EGL)
endif()

here's the patch file for the final changes:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 585a76e..1cd3407 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,6 +13,8 @@ set(OpenGL_GL_PREFERENCE "LEGACY")
 set(DATADIR ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME})
 set(PATCHESDIR ${DATADIR}/patches/)
 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+add_compile_definitions(FF_API_FIFO_OLD_API=1)
+add_compile_definitions(FF_API_OLD_CHANNEL_LAYOUT=1)

 if(NOT ERRORONLY)
     set(ERRORONLY 0)
@@ -454,7 +456,7 @@ if (WAYLAND_SUPPORT_FOUND)
         wayland-cursor
         wayland-client
         wayland-egl
-        ${OPENGL_egl_LIBRARY})
+        EGL)
 endif()

 if(X11_SUPPORT_FOUND)

OPENGL_egl_LIBRARY is set to /usr/local/bin/libEGL.so whereas plain EGL is found at /usr/include/EGL, not sure why the libEGL.so one breaks

DI-HUO-MING-YI commented 3 months ago

It just works. Thank you so much.