DisplayLink / evdi

Extensible Virtual Display Interface
MIT License
708 stars 184 forks source link

Cannot be compiled on Fedora 40 #475

Closed mhdev90 closed 2 months ago

mhdev90 commented 3 months ago

The EVDI release 1.14.5 cannot be compiled under Fedora 40.

OS Info:

cat /etc/os-release 
NAME="Fedora Linux"
VERSION="40 (Workstation Edition)"
ID=fedora
VERSION_ID=40
VERSION_CODENAME=""
PLATFORM_ID="platform:f40"
PRETTY_NAME="Fedora Linux 40 (Workstation Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:40"
DEFAULT_HOSTNAME="fedora"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f40/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=40
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=40
SUPPORT_END=2025-05-13
VARIANT="Workstation Edition"
VARIANT_ID=workstation

Kernel:

uname -a
Linux 603-12758-01 6.9.7-200.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jun 27 18:11:45 UTC 2024 x86_64 GNU/Linux

Error:

make      
CFLAGS="-isystem./include -isystem./include/uapi -Werror -Wextra -Wall -Wno-error=missing-field-initializers -Werror=sign-compare -Wmissing-prototypes -Wstrict-prototypes -Werror=discarded-qualifiers " make -C module 
make[1]: Verzeichnis „/tmp/displaylink/evdi-1.14.5/module“ wird betreten
make -C /lib/modules/6.9.7-200.fc40.x86_64/build M=$PWD
make[2]: Verzeichnis „/usr/src/kernels/6.9.7-200.fc40.x86_64“ wird betreten
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: gcc (GCC) 14.1.1 20240620 (Red Hat 14.1.1-6)
  You are using:           gcc (GCC) 14.1.1 20240701 (Red Hat 14.1.1-7)
  MODPOST /tmp/displaylink/evdi-1.14.5/module/Module.symvers
make[2]: Verzeichnis „/usr/src/kernels/6.9.7-200.fc40.x86_64“ wird verlassen
make[1]: Verzeichnis „/tmp/displaylink/evdi-1.14.5/module“ wird verlassen
CFLAGS="-I../module -Werror -Wextra -Wall -Wno-error=missing-field-initializers -Werror=sign-compare -Wmissing-prototypes -Wstrict-prototypes -Werror=discarded-qualifiers " make -C library 
make[1]: Verzeichnis „/tmp/displaylink/evdi-1.14.5/library“ wird betreten
cc -I../module -std=gnu99 -fPIC -D_FILE_OFFSET_BITS=64 -I../module -Werror -Wextra -Wall -Wno-error=missing-field-initializers -Werror=sign-compare -Wmissing-prototypes -Wstrict-prototypes -Werror=discarded-qualifiers  $(pkg-config --cflags-only-I libdrm)   -c -o evdi_lib.o evdi_lib.c
cc evdi_lib.o -shared -Wl,-soname,libevdi.so.1 -o libevdi.so.1.14.5 -lc -lgcc 
cp libevdi.so.1.14.5 libevdi.so
ln -sf libevdi.so.1.14.5 libevdi.so.1
make[1]: Verzeichnis „/tmp/displaylink/evdi-1.14.5/library“ wird verlassen
CXXFLAGS="-I../module -I../library -Werror -Wextra -Wall -Wno-error=missing-field-initializers -Werror=sign-compare " make -C pyevdi 
make[1]: Verzeichnis „/tmp/displaylink/evdi-1.14.5/pyevdi“ wird betreten
g++ -I../library $(python3 -m pybind11 --includes) -std=c++20 -fPIC -fvisibility=hidden -I../module -I../library -Werror -Wextra -Wall -Wno-error=missing-field-initializers -Werror=sign-compare  -c Buffer.cpp
g++ -I../library $(python3 -m pybind11 --includes) -std=c++20 -fPIC -fvisibility=hidden -I../module -I../library -Werror -Wextra -Wall -Wno-error=missing-field-initializers -Werror=sign-compare  -c Card.cpp
In Datei, eingebunden von Card.h:11,
                 von Card.cpp:6:
Stats.h:25:26: Fehler: »chrono« ist kein Element von »std«
   25 |         std::vector<std::chrono::microseconds> grabPixelStats;
      |                          ^~~~~~
Stats.h:25:46: Fehler: Templateargument 1 ist ungültig
   25 |         std::vector<std::chrono::microseconds> grabPixelStats;
      |                                              ^
Stats.h:25:46: Fehler: Templateargument 2 ist ungültig
Stats.h:25:14: Fehler: »<expression error>« in Namensbereich »std« bezeichnet keinen Typ
   25 |         std::vector<std::chrono::microseconds> grabPixelStats;
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stats.h:26:26: Fehler: »chrono« ist kein Element von »std«
   26 |         std::vector<std::chrono::microseconds> bufferStats;
      |                          ^~~~~~
Stats.h:26:46: Fehler: Templateargument 1 ist ungültig
   26 |         std::vector<std::chrono::microseconds> bufferStats;
      |                                              ^
Stats.h:26:46: Fehler: Templateargument 2 ist ungültig
Stats.h:26:14: Fehler: »<expression error>« in Namensbereich »std« bezeichnet keinen Typ
   26 |         std::vector<std::chrono::microseconds> bufferStats;
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[1]: *** [Makefile:33: Card.o] Fehler 1
make[1]: Verzeichnis „/tmp/displaylink/evdi-1.14.5/pyevdi“ wird verlassen
make: *** [Makefile:19: pyevdi] Fehler 2

Solution: Add a include to pyevdi/Stats.h file.

#include <chrono>