CLion DLLs nicht gefunden



  • Hi Leute,
    ich bin neu in diesem Forum, also falls ich etwas falsch mache, tut mir das leid.

    Ich habe ein Problem mit OpenCV, dass ich nutzen möchte, um so eine einfache Bildschirmübertragung umzusetzen (Bildkomprimierung)
    Ich bin beim Linken von Third-Partys leider Anfänger.
    OpenCV habe ich mir hier auf Github heruntergeladen.

    Dann habe ich den Bin-Ordner (C:\opencv\build\x64\vc16\bin) in die Variablen zu "Path" gelegt, damit alle DLLs gefunden werden.
    Mit der CMakeLists.txt (unten) und CLion mit Bundled MinGW (default) Toolchain kann ich meinen Code mit dem Button "Run" erfolgreich in CLion ausführen.
    Wenn ich die .exe nun aber mit dem Explorer aufrufe und ausführe, bekomme ich folgende 3 Fehler:
    "Die Ausführung des Codes kann nicht fortgeseitzt werden, dalibopencv_core455.dll nicht gefunden wurde"
    "[...] libopencv_imgcodecs455.dll [...]"
    "[...] libopencv_imgproc455.dll [...]"

    CMakeLists.txt:

    cmake_minimum_required(VERSION 3.27)
    project(server)
    
    set(CMAKE_CXX_STANDARD 23)
    
    set(CMAKE_EXE_LINKER_FLAGS " -O3 -m64 -static -static-libgcc -static-libstdc++")
    
    set(CMAKE_EXE_LINKER_FLAGS "-static")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -static-libgcc")
    
    add_executable(server main.cpp)
    
    set(BUILD_SHARED_LIBS OFF)
    
    set(OpenCV_DIR "C:\\opencv")
    
    
    find_package(OpenCV REQUIRED)
    include_directories("${OpenCV_INCLUDE_DIRS}")
    
    target_link_libraries(server ${OpenCV_LIBS} ws2_32 gdi32 comdlg32 ole32 oleaut32 shlwapi) 
    

    Ich möchte, dass ich mein Programm server.exe auch auf anderen rechnern läuft, die nicht im PATH opencv linken müssen, also als standalone.

    Weiß jemand wie das richtig geht?

    Vielen Dank im Voraus,

    Lukas



  • Vielleicht OpenCV statisch kompilieren: cmake -DBUILD_SHARED_LIBS=OFF ..
    ... und auch weitere Abhängigkeiten statisch verlinken.

    Deine CMakeLists.txt könnte wie folgt aussehen:

    cmake_minimum_required(VERSION 3.27)
    project(server)
    
    set(CMAKE_CXX_STANDARD 23)
    
    set(CMAKE_EXE_LINKER_FLAGS " -O3 -m64 -static -static-libgcc -static-libstdc++")
    
    set(BUILD_SHARED_LIBS OFF)
    
    set(OpenCV_DIR "C:\\opencv")
    
    find_package(OpenCV REQUIRED)
    include_directories("${OpenCV_INCLUDE_DIRS}")
    
    target_link_libraries(server ${OpenCV_LIBS} ws2_32 gdi32 comdlg32 ole32 oleaut32 shlwapi)
    

Anmelden zum Antworten