cmake mingw link lib



  • Hi Leute,

    ich sehe den Wald vor lauter Bäume nicht... Google gibt mir alles möglich, aber nicht die Lösung für mein Problem raus. Bitte hilfe 😕

    System: Linux. IDE: KDevelop

    Ziel: eine Win-DLL mit Link auf wininet.dll

    Ich habe: /usr/i686-w64-mingw32/lib/libwininet.a

    Wie kann ich diese in die CMakeLists einbauen?

    Fehler: /usr/bin/i686-w64-mingw32-ld: cannot find -lwininet.lib

    Eine .lib habe ich nicht... Es muss aber so gehen, weil MingW nur die ".a"-Libs hat. Ob static oder shared ist mir schleierhaft. Google ist leider nicht auf deutsch und die Suche entwickelt sich für mich wie die berühmte Nadel im Heuhaufen. Wer kann helfen, bitte?

    Vielen Dank!



  • Die CMakeList, falls gewünscht:

    cmake_minimum_required(VERSION 2.6)
    
    project(MyBoardLib)
    
    include(/project/win32/Toolchain-cross-mingw32-linux.cmake)
    
    add_definitions(-DBUILD_DLL)
    
    #SET(CMAKE_BUILD_TYPE Release)
    SET(CMAKE_BUILD_TYPE Debug)
    
    #set(CMAKE_CXX_FLAGS_RELEASE "-static -O3 -DNDEBUG")	# default
    set(CMAKE_CXX_FLAGS_DEBUG "-static-libgcc -static-libstdc++ -Wl,--subsystem,windows")
    
    set(LIB_TYPE "SHARED")
    
    add_library(MyBoardLib ${LIB_TYPE} core/INetHelper.cpp \\
    	main.cpp \\
    	)
    
    target_link_libraries(MyBoardLib wininet)
    


  • Oh man 😮

    Google wird immer blöder, die Suche nach cmake libwininet.a hilft erst.

    Daraus ergibt sich folgende Lösung:

    set(CMAKE_CXX_STANDARD_LIBRARIES "/usr/i686-w64-mingw32/lib/libwininet.a")
    

    Ist zwar nicht sehr fein, hilft aber schon mal weiter.

    Problem gelöst, danke!



  • set(CMAKE_CXX_STANDARD_LIBRARIES "/usr/i686-w64-mingw32/lib/libwininet.a")

    Damit solltest du die Standard Libs die von dem Generator kommen, alle überschreiben. Wenn sonst keine Brauchst, auch ok ^^

    besser:

    SET(LINK_TO_MYLIB)    # Leere variable erstellen 
    LIST(APPEND LINK_TO_MYLIB "/usr/i686-w64-mingw32/lib/libwininet.a") #Variable als Liste behandeln und einen eintrag hinzufügen 
    TARGET_LINK_LIBRARIES(mytarget LINK_TO_MYLIB) # Builder sagen das er das binary mytarget gegen die libs in LINK_TO_MYLIB linken soll
    

    mytarget sollte ein cmake target sein was mit add_executable oder add_library erstellt wurde

    Ciao ...



  • Yes 👍

    Danke für die Info!

    Bin gerade am Anfang, das war die einzige Lösung die geholfen hat.

    Die Lösung ist Perfekt:

    SET(LINK_TO_MYLIB)
    LIST(APPEND LINK_TO_MYLIB "/usr/i686-w64-mingw32/lib/libwininet.a")
    TARGET_LINK_LIBRARIES(MyBoardLib ${LINK_TO_MYLIB})
    

    Danke!


Anmelden zum Antworten