NanoGUI in VS2017 für OpenGL in C++ einrichten Win7



  • Hallo Forum,

    Da dies mein erster "Beitrag" ist sage ich mal "Hallo!"".

    Meine erste Frage ist nun ob jemand weis wie man NanoGUI richtig einrichtet mit allen Abhängigkeiten usw.
    Ich versuche seit geraumer Zeit dies zu schaffen, jedoch compiliert das ganze nicht zu Ende.
    Habe mir auch die Docs durchgelesen, werde daraus aber nicht schlau.

    GLFW, GLAD, Eigen und Nanovg habe ich im include Ordner.

    Libs habe ich folgende eingebunden:
    opengl32.lib
    glfw3.lib
    glew32.lib

    Ich versuche "example2" aus der nanogui_master zum laufen zu bringen.
    Fehler im main.cpp habe ich keine.
    Jedoch beim compilieren bekomme ich:

     1>------ Build started: Project: NanoGUI_Test1, Configuration: Debug x64 ------
    1>example2.obj : error LNK2019: unresolved external symbol "void __cdecl nanogui::init(void)" (?init@nanogui@@YAXXZ) referenced in function main
    1>example2.obj : error LNK2019: unresolved external symbol "void __cdecl nanogui::shutdown(void)" (?shutdown@nanogui@@YAXXZ) referenced in function main
    1>example2.obj : error LNK2019: unresolved external symbol "void __cdecl nanogui::mainloop(int)" (?mainloop@nanogui@@YAXH@Z) referenced in function main
    1>example2.obj : error LNK2019: unresolved external symbol "public: void __cdecl nanogui::Object::decRef(bool)const " (?decRef@Object@nanogui@@QEBAX_N@Z) referenced in function "public: __cdecl nanogui::ref<class nanogui::AdvancedGridLayout>::~ref<class nanogui::AdvancedGridLayout>(void)" (??1?$ref@VAdvancedGridLayout@nanogui@@@nanogui@@QEAA@XZ)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl nanogui::Widget::setTheme(class nanogui::Theme *)" (?setTheme@Widget@nanogui@@UEAAXPEAVTheme@2@@Z)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl nanogui::Widget::addChild(int,class nanogui::Widget *)" (?addChild@Widget@nanogui@@UEAAXHPEAV12@@Z)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual bool __cdecl nanogui::Widget::mouseMotionEvent(class Eigen::Matrix<int,2,1,0,2,1> const &,class Eigen::Matrix<int,2,1,0,2,1> const &,int,int)" (?mouseMotionEvent@Widget@nanogui@@UEAA_NAEBV?$Matrix@H$01$00$0A@$01$00@Eigen@@0HH@Z)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual bool __cdecl nanogui::Widget::mouseDragEvent(class Eigen::Matrix<int,2,1,0,2,1> const &,class Eigen::Matrix<int,2,1,0,2,1> const &,int,int)" (?mouseDragEvent@Widget@nanogui@@UEAA_NAEBV?$Matrix@H$01$00$0A@$01$00@Eigen@@0HH@Z)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual bool __cdecl nanogui::Widget::mouseEnterEvent(class Eigen::Matrix<int,2,1,0,2,1> const &,bool)" (?mouseEnterEvent@Widget@nanogui@@UEAA_NAEBV?$Matrix@H$01$00$0A@$01$00@Eigen@@_N@Z)
    1>example2.obj : error LNK2019: unresolved external symbol "public: virtual bool __cdecl nanogui::Widget::scrollEvent(class Eigen::Matrix<int,2,1,0,2,1> const &,class Eigen::Matrix<float,2,1,0,2,1> const &)" (?scrollEvent@Widget@nanogui@@UEAA_NAEBV?$Matrix@H$01$00$0A@$01$00@Eigen@@AEBV?$Matrix@M$01$00$0A@$01$00@4@@Z) referenced in function "public: virtual bool __cdecl nanogui::FloatBox<float>::scrollEvent(class Eigen::Matrix<int,2,1,0,2,1> const &,class Eigen::Matrix<float,2,1,0,2,1> const &)" (?scrollEvent@?$FloatBox@M@nanogui@@UEAA_NAEBV?$Matrix@H$01$00$0A@$01$00@Eigen@@AEBV?$Matrix@M$01$00$0A@$01$00@4@@Z)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual bool __cdecl nanogui::Widget::focusEvent(bool)" (?focusEvent@Widget@nanogui@@UEAA_N_N@Z)
    1>example2.obj : error LNK2001: unresolved external symbol "public: virtual bool __cdecl nanogui::Widget::keyboardEvent(int,int,int,int)" (?keyboardEvent@Widget@nanogui@@UEAA_NHHHH@Z)
    
    und es geht noch weiter....
    

    Kann es sein dass das an GLAD liegt, man muss das in einem online Konfigurator erzeugen.

    Vielen Dank. Dankbar für jeden Tipp! 🙂



  • @blaxxun sagte in NanoGUI in VS2017 für OpenGL in C++ einrichten Win7:

    Kann es sein dass das an GLAD liegt, man muss das in einem online Konfigurator erzeugen.

    Kann ich nicht sagen, da ich selbst glew brauche, die ich statisch eingebunden habe glew32s.lib. Aber bei der Ausgabe oben nehme ich an, dass NanoGUI nicht kompiliert und/oder die entsprechende library nicht eingebunden(?) ist.

    Edit 1: Sorry, habe Frage nicht richtig gelesen 😟 Du bist am kompilieren der NanoGUI.

    Edit 2: Also cmake generiert je nach Wahl die Projektdateien (z.B. *.sln), daher muss man eigentlich nicht *.lib Dateien selbst einbinden(?).



  • Hallo titan99,

    Danke für deine Hilfe.

    Also ich habe versucht mit CMake das Projekt zu erstellen aus nanogui-master.
    Es gelang mir nicht da ich immer den Fehler:

    CMake Error at CMakeLists.txt:15 (message):
      The NanoGUI dependency repositories (GLFW, etc.) are missing! You probably
      did not clone the project with --recursive.  It is possible to recover by
      calling "git submodule update --init --recursive"
    

    erhalte.

    Also nachgeschaut was fehlt unter nanogui-master/ext
    Hier sind schon Ordner angelegt aber eigen,glfw und nanovg sind leer.
    Okay, die nötigen Files aus meinem Haupt include Ordner in die jeweiligen Ordner kopiert und...selber Fehler wieder.

    Ich versuche nun herauszufinden was es mit "...clone the project with recursive" auf sich hat.



  • @blaxxun guten Morgen ☕

       CMake Error at CMakeLists.txt:15 (message):
      The NanoGUI dependency repositories (GLFW, etc.) are missing! You probably
      did not clone the project with --recursive.  It is possible to recover by
      calling "git submodule update --init --recursive"
    

    steht alles bereits in der message. In der Documentation von git steht wie man bereits submodule mit git clone "klont".



  • @titan99_ Guten Abend und danke für deine Hinweise.

    Nachdem ich keine Ahnung von Github und CMake hatte habe ich mich etwas schlau gemacht und bin zu folgendem
    Ergebnis gekommen.

    Da die zur Verfügung gestellten Source Files Plattform unabhängig sind, fehlen die Plattform spezifischen Files wenn man
    sich einfach nur das ZIP File herunterlädt (im ext Ordner).

    Um an das komplette Paket für seine Plattform zu kommen (in meinem Fall Windows 7) muss man die Source Files auf
    seine eigene Maschine clonen.

    Es gibt verschiedene Wege das zu tun:

    Variante 1 - Mittels Git Bash

    1. Git herunterladen und installieren mit default settings --> https://git-scm.com/downloads
    2. Sich auf Github einloggen
    3. Hierher gehen --> https://github.com/wjakob/nanogui
    4. Auf den grünen button "Clone or download" klicken und die Git Adresse kopieren
    5. Git Bash starten und folgendes eingeben --> git clone --recurse-submodules https://github.com/wjakob/nanogui.git C:/Users/USERNAME/Source/Repos/nanogui
    6. Neuen Ordner erstellen --> mkdir C:/Users/USERNAME/Source/Repos/nanogui/build
    7. Git Bash Konsole schließen und CMake GUI starten
    8. Where is source --> C:/Users/USERNAME/Source/Repos/nanogui
    9. Where are binaries --> C:/Users/USERNAME/Source/Repos/nanogui/build
    10. Configure button --> Visual Studio 15 2017 Win64 --> Use default native compiler --> Finish button
    11. Nachdem "Configure done" ist kann man nun den Generate button klicken
    12. Im nanogui/build Ordner sollte nun die VS2017 Solution sein --> NanoGUI.sln
    13. NanoGUI.sln doppelklicken und die Solution öffnet sich in Visual Studio 2017

    Bei mir sind allerdings lauter rote Kreise mit Minus Symbol.
    Keine Ahnung was das heisst bis jetzt.
    Rechtsklick auf das example2 Projekt --> Set as startup Project --> Debug --> x64 --> Start Debugging --> Läuft.
    example1 läuft nicht, warum auch immer.

    Variante 2 - Mittels Github Extension für Visual Studio

    1. Visual Studio schließen
    2. Github Extension hier herunterlden und installieren --> https://visualstudio.github.com/
    3. Sich auf Github einloggen und hier her gehen --> https://github.com/wjakob/nanogui
    4. Grünen Button "Clone or download" klicken --> "Open in Visual Studio" klicken
    5. Popup "Anwendung starten" --> "Link öffnen" button klicken
    6. VS2017 startet --> Team Explorer Tab --> Local Git Repositories --> Pfade checken --> Recursively Clone Submodules --> muss angehakt sein
    7. Pfad sollte sein --> C:/Users/USERNAME/Source/Repos/nanogui
    8. Clone button klicken
    9. x64-Debug wählen und Select Startup Item example2.exe wählen und klicken

    Im Prinzip ist das nun keine normale Solution sondern ein CMake Projekt was ich persönlich irgendwie ungewohnt finde.
    Man kann nun natürlich das ganze mittels CMake builden wie in Variante 1 - Punkt 7 bis 13.

    Ich habe den Verdacht daß man das builden auch direkt in Visual Studio machen kann da CMake nun integriert ist.
    VS2017 --> CMake Dropdown Menü --> Build all.

    Allerdings finde ich die Solution nicht.



  • Also ich kenne mich nicht so gut aus und hoffe, dass ich durch die Antworten nicht beim "cheaten" im übertragenen Sinn helfe.

    @blaxxun sagte in NanoGUI in VS2017 für OpenGL in C++ einrichten Win7:

    Git Bash starten und folgendes eingeben --> git clone --recursive -- https://github.com/wjakob/nanogui.git C:/Users/USERNAME/Source/Repos/nanogui

    Dazu steht in der documentation git clone --recurse-submodules https://github.com/wjakob/nanogui. Ob git clone --recursive zu einem Fehler führt, weiss ich nicht.

    @blaxxun sagte in NanoGUI in VS2017 für OpenGL in C++ einrichten Win7:

    Rechtsklick auf das example2 Projekt --> Set as startup Project --> Debug --> x64 --> Start Debugging --> Läuft.

    Ich denke wenn nur das example2 kompiliert wird, fehlt immer noch die library. Also einfach ALL_BUILD erstellen (oder "Batch erstellen..."). Habe alles kurz in ca. 5 min ausprobiert und es funktionert einwandfrei.



  • @titan99_ Danke für deinen Tip.
    Was meinst du mit: "beim cheaten helfen?"

    Ich habe das Projekt nun nochmals gecloned mit folgendem Befehl:
    git clone --recurse-submodules https://github.com/wjakob/nanogui.git C:/Users/USERNAME/Source/Repos/nanogui

    Dann mit CMake die Solution erstellt und NanoGUI.sln in VS2017 geöffnet.
    Dann habe ich ALL_BUILD gebuildet.
    Danach example1.

    Es läuft nun. Vielen Dank.


Log in to reply