Hallo erstmal,
Ich möchte in c++ ein programm schreiben, welches die externe library gsl (gnu scientific library) und gtk+ verwendet .
Wie gehe ich hierbei vor?
Ich benutze Microsoft visual studio. Ich habe in den letzten Tagen die gsl und gtk+ glaube ich erfolgreich für visual studio konfiguriert.
Meine grafische oberfläche möchte ich wenn der code für meine berechnung fertig ist mit gtk+ erstellen.
Für das Programm brauche ich Matrix und linear algebra funktionen von gsl.
Das Programm sollte plattformunabhängig sein. Stellt es also ein Problem dar wenn ich gsl verwende?
Ich denke gsl stellt den standard für wissenschaftliche berechnungen dar, also ist es so gesehen kein fehler wenn ich mich gleich mit der syntax vertraut mache, da ich sie in zukunft sicher noch brauchen werde.
Oder ist es besser kleinere librarys wie Matrix TCL Pro oder MTL4 zu verwenden?
...schreibe ich dann die main für gtk?
Was ist die einfachste Art ein einfaches platformunabhängiges Programm mit grafischer oberfläche (gtk+), das auf die gsl zugreift zu schreiben, ohne das der Nutzer dafür selbst etwas konfigurieren muss. Statisch linken?
Wenn ja, wie funktioniert das genau?
mfg Manuel
program externen libraries (gsl, gtk) erstellen
- mulprogger
- Beiträge: 16
- Registriert: Do Apr 05, 2012 10:16 am
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: program externen libraries (gsl, gtk) erstellen
Im Standardfall includierst du die entsprechenden Header-dateien von gtk+ und gsl und gibst dem Linker die Libs mit, sodass der das zusammen linken kann.Ich möchte in c++ ein programm schreiben, welches die externe library gsl (gnu scientific library) und gtk+ verwendet .
Wie gehe ich hierbei vor?
Garnicht, bzw Java.Was ist die einfachste Art ein einfaches platformunabhängiges Programm mit grafischer oberfläche (gtk+), das auf die gsl zugreift zu schreiben, ohne das der Nutzer dafür selbst etwas konfigurieren muss. Statisch linken?
Sobald du eine Ausfürbare Datei hast, ist sie an ein Betriebssystem gebunden, folglich gibt es auch keine Ausführbare Datei, die auf allen System läuft, außer du verwendest Sprachen wie Java oder python, was aber nicht der Sinn der Sache ist.
Was aber Plattformunabhängig funktioniert, ist aber das Compilieren und Linken. Sprich du kannst Code programmieren, der auf Windows und auf Linux compiliert werden kann, weil du eben auf bestimmte Abhängigkeiten verzichtet hast. Das würde mit gtk+ und gsl höchstwahrscheinlich gut funktionieren.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- mulprogger
- Beiträge: 16
- Registriert: Do Apr 05, 2012 10:16 am
Re: program externen libraries (gsl, gtk) erstellen
Ich soll dem User also den Code zur Verfügung stellen und dieser soll ihn selbst compilieren? Ok klingt fair auch wenn unter Windows für jemanden abseits des Geschehens keine 5 min arbeit...
Gut... Wie finde ich heraus welche lib's, dll's, header etc ich brauche und welche nicht, denn manche sind doch voneinander abhängig oder? Bzw gibt es einen Weg um nur die notwendigen Dateien der Libraries zu finden, denn gsl und gtk haben zusammen rund 300mb...
danke im voraus!
Also die Header für die Funktionen in den Dateien die ich im Code aufrufe? Denke so...Im Standardfall includierst du die entsprechenden Header-dateien von gtk+ und gsl und gibst dem Linker die Libs mit, sodass der das zusammen linken kann.
Gut... Wie finde ich heraus welche lib's, dll's, header etc ich brauche und welche nicht, denn manche sind doch voneinander abhängig oder? Bzw gibt es einen Weg um nur die notwendigen Dateien der Libraries zu finden, denn gsl und gtk haben zusammen rund 300mb...
danke im voraus!
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: program externen libraries (gsl, gtk) erstellen
Naja, für Windows kannst du schon Compilierte *.exe Dateien anbieten, für Mac kannst du auch schon compilieren und wenn du Proprietäten Code für Linux programmieren willst, stößt du an das Problem, das Linux über die paketverwaltung egt immer eine Mischung aus Source-Code und Binarys läd und dann auf dem Computer zusammenfriemelt.Ich soll dem User also den Code zur Verfügung stellen und dieser soll ihn selbst compilieren? Ok klingt fair auch wenn unter Windows für jemanden abseits des Geschehens keine 5 min arbeit...
Also, wenn du eine Funktion aus dem Paket brauchst, musst du dir die Header-Datei raussuchen, die sie beinhaltet und includierst diese(steht meistens in der Dokumentation). Dann ist es meistens auch so, dass die allgemeine Header-Dateien haben oder die header-Dateien ihre Abhängigkeiten selber einbinden, ansonsten einfach mal ausprobieren, kann ja nicht schlimmer sein als Fehlermeldungen vom Compiler.Also die Header für die Funktionen in den Dateien die ich im Code aufrufe? Denke so..
Erstmal Dokumentation. Dann ist es so, dass der Linker meistens nur das einbindet, was er wirklich braucht, außer du zwingst ihn ALLES zusammenzulinken oder was auch immer. Im Standardfall macht der Linker schon sehr viel selber. Bei *.dll ist es zusätzlich so, dass diese aus ihrer alt als Shared library IMMER vom Programm getrennt sein und zur Laufzeit aufgerufen werden.Gut... Wie finde ich heraus welche lib's, dll's, header etc ich brauche und welche nicht, denn manche sind doch voneinander abhängig oder? Bzw gibt es einen Weg um nur die notwendigen Dateien der Libraries zu finden, denn gsl und gtk haben zusammen rund 300mb...
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: program externen libraries (gsl, gtk) erstellen
Was bedeutet für dich Plattformübergreifend? Willst du auch dass es auf Linux/Mac funktioniert?
Dazu musst du 1) nur Portable Bibliotheken verwenden. Das ist mit GTK+ und GSL schon mal richtig.
2) solltest du Code schreiben, der auf deinen Zielcompilern funktioniert. Das sollte mit C++ kein Problem sein, du solltest dein Programm aber auch mal mit nem anderen Compiler als Visual Studio kompilieren (z.B. mit dem GCC).
So, dann geht der Spaß erst richtig los
Wie bereits erwähnt, musst du für jede Plattform, auf der dein Programm laufen soll es neu kompilieren.
Dazu ist es - wie du bereits sagst - am einfachsten, den Quellcode herzugeben. Allerdings ist es mit den Abhängigkeiten und Compilern auf windows ziemlich kompliziert, und ich würde das den Nutzern nicht zumuten - hier kannst du 2 Versionen (32-Bit und 64-Bit) kompilieren und den windowsnutzern bereitstellen.
Weiters mit den Abhängigkeiten:
Du solltest dir immer deiner direkten Abhängkigkeiten bewusst sein, das sind also bei dir GTK+ und GSL.
Unter Linux musst du auf jedem System die Pakete der Bibliotheken installieren, das sollte ziemlich einfach gehen, wenn man die richtigen gefunden hat. Melde dich, wenn du für eine bestimmte Linuxdistro kompilieren willst.
Unter Windows solltest du folgendes machen: dynamisch Linken, und dann mit depends.exe Prüfen, welche .DLL's du brauchst. Diese Packst du mit deiner .EXE in ein Verzeichnis, und dieses kannst du dann verteilen. Du brauchst dazu NICHT den ganzen Quellcode/Header der GTK+/GSL Bibliotheken, sondern eben nur die richtigen .DLL's.
Hm, das war jetzt nicht ganz so klar, aber hoffe es hat ein wenig geholfen. Bitte Frag nach wenn was unklar geblieben ist.
Dazu musst du 1) nur Portable Bibliotheken verwenden. Das ist mit GTK+ und GSL schon mal richtig.
2) solltest du Code schreiben, der auf deinen Zielcompilern funktioniert. Das sollte mit C++ kein Problem sein, du solltest dein Programm aber auch mal mit nem anderen Compiler als Visual Studio kompilieren (z.B. mit dem GCC).
So, dann geht der Spaß erst richtig los

Wie bereits erwähnt, musst du für jede Plattform, auf der dein Programm laufen soll es neu kompilieren.
Dazu ist es - wie du bereits sagst - am einfachsten, den Quellcode herzugeben. Allerdings ist es mit den Abhängigkeiten und Compilern auf windows ziemlich kompliziert, und ich würde das den Nutzern nicht zumuten - hier kannst du 2 Versionen (32-Bit und 64-Bit) kompilieren und den windowsnutzern bereitstellen.
Weiters mit den Abhängigkeiten:
Du solltest dir immer deiner direkten Abhängkigkeiten bewusst sein, das sind also bei dir GTK+ und GSL.
Unter Linux musst du auf jedem System die Pakete der Bibliotheken installieren, das sollte ziemlich einfach gehen, wenn man die richtigen gefunden hat. Melde dich, wenn du für eine bestimmte Linuxdistro kompilieren willst.
Unter Windows solltest du folgendes machen: dynamisch Linken, und dann mit depends.exe Prüfen, welche .DLL's du brauchst. Diese Packst du mit deiner .EXE in ein Verzeichnis, und dieses kannst du dann verteilen. Du brauchst dazu NICHT den ganzen Quellcode/Header der GTK+/GSL Bibliotheken, sondern eben nur die richtigen .DLL's.
Hm, das war jetzt nicht ganz so klar, aber hoffe es hat ein wenig geholfen. Bitte Frag nach wenn was unklar geblieben ist.
Haters gonna hate, potatoes gonna potate.
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: program externen libraries (gsl, gtk) erstellen
Sorry, aber das stimmt so nicht. In den meisten Distros sind die Binärpakate mit den Bibliotheken (*.so) fast immer von den Paketen mit den Headern getrennt. Man braucht zum Kompilieren dann meistens ein *-dev (Debian) oder -devel (Fedora) Paket.cloidnerux hat geschrieben:das Linux über die paketverwaltung egt immer eine Mischung aus Source-Code und Binarys läd und dann auf dem Computer zusammenfriemelt.
Haters gonna hate, potatoes gonna potate.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: program externen libraries (gsl, gtk) erstellen
Ok, danke für die Info.Sorry, aber das stimmt so nicht. In den meisten Distros sind die Binärpakate mit den Bibliotheken (*.so) fast immer von den Paketen mit den Headern getrennt. Man braucht zum Kompilieren dann meistens ein *-dev (Debian) oder -devel (Fedora) Paket
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum