Laufzeitbibliothek wxWidgets und Lauffähige Programme



  • Hallo

    Das Thema mit den Laufzeitbibliotheken wurde schon oft angesprochen, aber Fragen bleiben immer noch offen. Kann mir mal einer Versuchen das auf Einfache Art und Weise rüber zu bringen . (es ist nicht jeder Informatiker!)

    Mein Anliegen ist folgendes:
    Ein Programm "XXX.exe" zu schreiben mit folgenden "Zutaten"

    -wxWidgets
    -wxSqlite3

    Verwendete Entwicklungsumgebung "Visual Studio 2008 C++".
    Also das Programm "XXX.exe"soll auf jeden X beliebigen Windows Rechner ab Version XP und Höher laufen.

    Wie gehe ich vor?

    1.wxWidgets installieren(entpacken)

    1.1 ich nehme z.B. wxMSW-2.8.10-Setup.exe
    1.2 dann wird in "c:\wx\wxWidgets2.8\build\msw" das Projekt "wx.dsw" aufgerufen
    1.2.1 es werden folgende Projektmappenkonfigurationen aufgerufen und Erstellt

    - Debug
    - Release
    - Unicode Debug
    - Unicode Release

    1.2.2 Umgebungsvariablen einstellen
    1.2.2.1 Systemeigenschaften/Erweitern/Umgebungsvariablen/Systemvariablen/Neu
    Name der Variablen: WXWIN
    Wert der Variablen: c:\wx\wxWidgets2.8

    und wenn nötig neu Booten.

    2 wxSqlite3 installieren(entpacken)

    2.2 dann wird in "c:\wx\wxsqlite3\build " (in meinem Fall) "wxsqlite3_vc9.sln" aufgerufen
    2.2.1 es werden folgende Projektmappenkonfigurationen aufgerufen und Erstellt

    - Static ANSI Debug Multilib Static
    - Static ANSI Release Multilib Static
    - Static Unicode Debug Multilib Static
    - Static Unicode Release Multilib Static

    2.2.2 Umgebungsvariablen einstellen
    2.2.2.1 Systemeigenschaften/Erweitern/Umgebungsvariablen/Systemvariablen/Neu
    Name der Variablen: WXSQLITE3
    Wert der Variablen: c:\wx\wxsqlite3

    und wenn nötig neu Booten.

    So nun meine Frage:

    ??? 1 ??? Wie muß ich das Projekt einstellen das ich nur ein Datei,
    in meinem Fall "xxx.exe" weitergeben kann?
    Projekt Eigenschaften/"C/C++"/Codegenerierung/Laufzeitbibliothek

    -Multithreaded (/MT)
    -Multithreaded-DLL (/MD)

    Die Debuge Versionen lassen wir mal aus.

    ??? 2 ??? Wie müssen die Build Projekte eingestellt sein , damit eine Lauffähige Anwendung "xxx.exe" ohne Fehler erstellt werden?

    Denn es muß doch einen weg , damit man den Rechner so einrichten kann

    -wxWidgets
    -wxSqlite3
    -Visual Studio c++

    Denn die ewige suche nach den richtigen Einstellung macht keinen Spaß.

    Und die folgenden Fehlermeldung nervt.

    "...error LNK2001: Nicht aufgelöstes externes Symbol ...."

    Ich hoffe ihr versteht was ich will?

    Gruß Califax



  • Entweder du kompilierst dein Programm statisch, oder du gibst mit deiner exe die enstprechenden dll-Dateien mit.
    "Nicht aufgelöstes externes Symbol" heisst, dass dein Linker Funktionen, die du in deinem Programm verwendest aufgrund fehlender Bibliotheken nicht auflösen kant, da du offenbar keinen oder einen falschen Pfad zu den Libs eingetragen hast.
    Also, wie gesagt, linkst du dein Programm statisch oder dynamisch. Bei letzterem musst du halt die Libs mitgeben. Bei ersterem hast du nur eine (wahrscheinlich ziemlich fette) Datei, die du weitergeben musst.

    "[...]Denn die ewige suche nach den richtigen Einstellung macht keinen Spaß.[...]"
    ist übrigens für einen Entwickler keine sehr förderliche Einstellung. 😉



  • Dein Programm benötigt laut deinen Angaben mind. folgende Dateien, die auf einem frischen XP nicht vorhanden sind:

    1. msvcrt90.dll (C-Runtime bei Verwendung von VS2008)
    2. wx-DLLs
    3. ....wxsqlite3.dll
    4. sqlite3.dll (die eigentliche sqlite-Lib, da wxsqlite3 "nur" ein Wrapper ist)

    msvcrt90.dll wird durch vcredist_x86.exe installiert, eventuell kann man sie auch einfach in den gleichen Ordner der exe legen (einfach mal testen).
    Alle anderen DLLs packt man einfach in den gleichen Ordner der exe und fertig.

    Willst du alles in einer Exe haben (nur Release-Weg):

    1. wx.dsw öffnen und bei jedem Projekt (aui, base, ...) die Eigenschaften öffnen und bei C++ / Codegenerierung "Multithreaded (/MT)" einstellen und dann als "Unicode Release" erstellen.
      ---> msvcrt90.dll wird nicht mehr benötigt und wx ist static-Lib (kann in deine Exe eingebunden werden)
    2. wxSqlite öffnen und auch "Multithreaded (/MT)" einstellen und als "Static Unicode Release Multilib Static" erstellen. Jedoch wird jetzt noch sqlite3.dll benötigt, eventuell musst du sqlite auch neu kompilieren.
    3. Dein Projekt musst du auch mit "Multithreaded (/MT)" erstellen und bei Linker / Eingabe / Zusätzliche... noch die wx und sqlite (xxx.lib) -Libs eintragen. Unter C++ die Include-Verzeichnisse für wx/sqlite nicht vergessen.


  • Softwaremaker schrieb:

    Dein Programm benötigt laut deinen Angaben mind. folgende Dateien, die auf einem frischen XP nicht vorhanden sind:

    1. msvcrt90.dll (C-Runtime bei Verwendung von VS2008)
    2. wx-DLLs
    3. ....wxsqlite3.dll
    4. sqlite3.dll (die eigentliche sqlite-Lib, da wxsqlite3 "nur" ein Wrapper ist)

    msvcrt90.dll wird durch vcredist_x86.exe installiert, eventuell kann man sie auch einfach in den gleichen Ordner der exe legen (einfach mal testen).
    Alle anderen DLLs packt man einfach in den gleichen Ordner der exe und fertig.

    Willst du alles in einer Exe haben (nur Release-Weg):

    1. wx.dsw öffnen und bei jedem Projekt (aui, base, ...) die Eigenschaften öffnen und bei C++ / Codegenerierung "Multithreaded (/MT)" einstellen und dann als "Unicode Release" erstellen.
      ---> msvcrt90.dll wird nicht mehr benötigt und wx ist static-Lib (kann in deine Exe eingebunden werden)
    2. wxSqlite öffnen und auch "Multithreaded (/MT)" einstellen und als "Static Unicode Release Multilib Static" erstellen. Jedoch wird jetzt noch sqlite3.dll benötigt, eventuell musst du sqlite auch neu kompilieren.
    3. Dein Projekt musst du auch mit "Multithreaded (/MT)" erstellen und bei Linker / Eingabe / Zusätzliche... noch die wx und sqlite (xxx.lib) -Libs eintragen. Unter C++ die Include-Verzeichnisse für wx/sqlite nicht vergessen.

    Was seid Ihr kompliziert :D?
    1.) Die Umgebungsvariablen kannste weglassen, die hab ich noch nie gebraucht mit Visual Studio.
    2.) wxDSW.sln öffnen
    3.) Konfiguration auf Debug, Release, Unicode Debug oder Unicode Release stellen.
    4.) Bauen
    5.) Die Verzeichnisse WXIDR/include, WXIDR/lib/msvc/mswd(u) zu den Include-Pfaden in MSVC hinzufügen
    6.) Das Verzeichnis WXDIR/lib/msvc zu den Bibliotheksverzeichnissen hinzufügen.
    7:) Das Projekt anpassen.

    Fertig.
    Wobei ich dringend dynamische Linkage empfehle, da es viel einfacher ist etwas zu patchen und vor allem beim kompilieren viel schneller geht. Wenn man dann noch Vorkompilierte Header einstellt, ist das ein Traum.
    Die vcredist_x86.exe einfach mitliefern. Das ist echt kein Akt. Irgendein Programm braucht die eh früher oder später.
    rya.



  • Hallo

    Ich danke euch für die Antworten.
    Werde mal Eure Vorschläge ausprobieren und dann werde ich mir mal eine Anleitung schreiben.
    Denn man richtet sein System ja nicht jeden Tag neu ein.

    ich melde mich noch mal wenn es noch Fragen gibt.

    Gruß und Dank
    Califax


Log in to reply