[gelöst] Sourcecode kompilieren
[gelöst] Sourcecode kompilieren
Moin
Ich habe heute auf meinem RasPi mit "apt-get source -b xyz-Programm" ein bestimmtes Programm runtergeladen. Irgendwie lief alles automatisch ab, downloaden, entpacken und kompilieren. Hinterher hatte ich das fertige Deb-Package zum installieren.
Wenn ich jetzt die Sourcecodes für das gleiche Programm mit höherer Versionsnummer habe, dann müsste es doch auch möglich sein, den Compiler irgendwie anders ohne apt-get anzustoßen, also das nur die Deb's direkt erzeugt werden. Der Compiller ist g++, also ein C-Compiler. Hat jemand einen Tip für mich, wie ich das mal versuchen kann?
Ich habe heute auf meinem RasPi mit "apt-get source -b xyz-Programm" ein bestimmtes Programm runtergeladen. Irgendwie lief alles automatisch ab, downloaden, entpacken und kompilieren. Hinterher hatte ich das fertige Deb-Package zum installieren.
Wenn ich jetzt die Sourcecodes für das gleiche Programm mit höherer Versionsnummer habe, dann müsste es doch auch möglich sein, den Compiler irgendwie anders ohne apt-get anzustoßen, also das nur die Deb's direkt erzeugt werden. Der Compiller ist g++, also ein C-Compiler. Hat jemand einen Tip für mich, wie ich das mal versuchen kann?
Zuletzt geändert von TomL am 14.02.2015 20:23:05, insgesamt 1-mal geändert.
Re: Sourcecode kompilieren
Ich hab das mal gemacht, aber ich weiß nicht mehr sicher wie. Hier mal grob aus dem Gedächtnis:
- Mit "apt-get source programm" den Quellcode heruntergeladen
- Ich glaube es gab dann eine DSC-Datei unter ./programm/debian
- In dieser Versionsnummer, Pfad zum Quellpaket, Prüfsumme etc. geändert
- Paket gebaut (ich glaube es war dpkg-buildpackage)
Sorry, eine funktionierende Anleitung kann ich dir nicht geben, aber vielleicht hilft dir das schon um dich reinzufuchsen.
- Mit "apt-get source programm" den Quellcode heruntergeladen
- Ich glaube es gab dann eine DSC-Datei unter ./programm/debian
- In dieser Versionsnummer, Pfad zum Quellpaket, Prüfsumme etc. geändert
- Paket gebaut (ich glaube es war dpkg-buildpackage)
Sorry, eine funktionierende Anleitung kann ich dir nicht geben, aber vielleicht hilft dir das schon um dich reinzufuchsen.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc
http://files.mdosch.de/2014-07/0xE13D657D.asc
Re: Sourcecode kompilieren
Bitte daran denken, dass „Sourcecode kompilieren“ und „Paket bauen“ zwei verschiedene Aufgaben sind. Im Startposts erschien’s mir so, dass das in einen Topf geworfen wurde. Sollte ich irren – sorry.
Re: Sourcecode kompilieren
Beim Erstellen und Installieren eines Programms aus Sourcecode geht es in der Regel so.
ggf. Archiv entpacken und dann
Vorbereiten
„Machen“
Installieren
Um ein Paket mit dpkg -b zu machen braucht man m.W. noch eine Controlldatei und ähnliches. Das ist nicht so ratsam, alles von Hand zu erstellen.
Ein ausführliche Anleitung bzw. Hintergründe zum Paketbau gibt es dort: https://www.debian.org/doc/manuals/maint-guide/
ggf. Archiv entpacken und dann
Vorbereiten
Code: Alles auswählen
./configure
Code: Alles auswählen
make
Code: Alles auswählen
make install
Ein ausführliche Anleitung bzw. Hintergründe zum Paketbau gibt es dort: https://www.debian.org/doc/manuals/maint-guide/
Re: Sourcecode kompilieren
Nee, nix durcheinandergeworfen.... der Befehl "apt-get source -b xyz-Programm" hat den Source runtergeladen, kompiliert UND das Paket gebaut.... alles in einer Rutsche, ohne dass ich da eingegriffen habe. Was da runtergekommen ist, war die Version 4.x.niemand hat geschrieben:Bitte daran denken, dass „Sourcecode kompilieren“ und „Paket bauen“ zwei verschiedene Aufgaben sind. Im Startposts erschien’s mir so, dass das in einen Topf geworfen wurde. Sollte ich irren – sorry.
Und jetzt habe ich die Version 5 als Sourcecode auf der Platte liegen und würde gerne mal testen, ob ich damit auch ein Paket selber "bauen" kann. Und ich kann natürlich jetzt kein apt-get source absetzen.... es liegt ja schon auf der Platte.
Re: Sourcecode kompilieren
Magst uns nicht verraten was xyz-Programm ist?
Re: Sourcecode kompilieren
Ich werf' mal zwei Links hier rein [1,2]. Im Grunde tust du deinen Patch dazu, nimmst ihn in den Index auf, erzeugst mit dch einen neuen Changelog-Eintrag und baust danach das Paket per debian/rules build in einer fakeroot/fakechroot-Umgebung.
dpkg-buildpackage nimmt einen Grossteil davon ab, insbesondere steht in dessen Manpage exakt drin, was es tut (und was man also haendisch nachturnen kann).
Gruss Cae
[1] https://wiki.debian.org/IntroDebianPackaging (Achtung, geht von nagelneuem Paket aus)
[2] https://wiki.debian.org/DebianMentorsFaq
dpkg-buildpackage nimmt einen Grossteil davon ab, insbesondere steht in dessen Manpage exakt drin, was es tut (und was man also haendisch nachturnen kann).
Gruss Cae
[1] https://wiki.debian.org/IntroDebianPackaging (Achtung, geht von nagelneuem Paket aus)
[2] https://wiki.debian.org/DebianMentorsFaq
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: Sourcecode kompilieren
Das Kompilieren ist ein Thema für sich, das nicht mit ein paar Befehlen abgehandelt ist.
Es gibt sehr viele Möglichkeiten, was man alles ändern kann und was man besser läßt.
Generell hat JürgenPB schon den einfachsten Weg erwähnt, aber ich würde statt des letzten Schritts "make install" lieber
das Kommando "checkinstall" verwenden. Mit diesem Befehl wird ein deb-Paket erstellt und kann dann mit dem bekannten
dpkg -i >Paket< installiert werden. Somit ist der Paketmanager dpkg informiert und man kann das Paket auch wieder sauber entfernen.
Das Paket checkinstall muß zusätzlich installiert werden.
Es gibt sehr viele Möglichkeiten, was man alles ändern kann und was man besser läßt.
Generell hat JürgenPB schon den einfachsten Weg erwähnt, aber ich würde statt des letzten Schritts "make install" lieber
das Kommando "checkinstall" verwenden. Mit diesem Befehl wird ein deb-Paket erstellt und kann dann mit dem bekannten
dpkg -i >Paket< installiert werden. Somit ist der Paketmanager dpkg informiert und man kann das Paket auch wieder sauber entfernen.
Das Paket checkinstall muß zusätzlich installiert werden.
- KBDCALLS
- Moderator
- Beiträge: 22441
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: Sourcecode kompilieren
Mit checkinstall wäre ich vorsichtig. Seit Dezember 2009 hat sich da nichts mehr getan. Das ist der letzte verfügbare Download.
Würde mich mal mit uscan und uupdate näher befassen. Bzw. debhelper und devsripts
Dann gibt es noch die Doku maint-guide , maint-guide-de und packaging-tutorial
Würde mich mal mit uscan und uupdate näher befassen. Bzw. debhelper und devsripts
Dann gibt es noch die Doku maint-guide , maint-guide-de und packaging-tutorial
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: Sourcecode kompilieren
KBDCALLS hat geschrieben:Mit checkinstall wäre ich vorsichtig. Seit Dezember 2009 hat sich da nichts mehr getan. Das ist der letzte verfügbare Download.
Ich nutze das oft und schon sehr lange und konnte bislang keine Probleme feststellen.
Aber viele Wege führen nach Rom.....
Re: Sourcecode kompilieren
Vielen Dank für Eure Antworten, aber das übersteigt meine Möglichkeiten. Ich hatte gehofft, das wäre analog zu "apt-get source -b xyz-Programm" mit einem Befehl zu machen. Ich bleibe einfach bei der etwas älteren Version.
Re: [gelöst] Sourcecode kompilieren
Moin @ all
Der erste Ansatz war leider nicht so ergiebig... .... das lag aber auch ein wenig am Fehlen der tatsächlichen Notwendigkeit für diese Aktion. Das ältere Programm lief ja, und ich weiß nicht einmal, ob die höhere Version merkbare Verbesserungen beinhaltet hat. Nun ja... seis drum....
Ich habe aber an anderer Stelle ein Problem, was mich schon sehr beschäftigt, und was momentan für eine für mich unbefriedigende Situation sorgt. Ich muss derzeit zum Arbeiten mit meinen Datenbanken wegen diesem Fehler im ODBC-Treiber Jessie runterfahren und mit Windows arbeiten.
Im Bugreport (ganz unten am Ende) sagt Ch. Werner jedoch, dass der Fehler in der aktuellen Version 0.9991 behoben ist.... und diese aktuelle Version kann man einfach auf seiner Web-Site als Source-Code-Paket sqliteodbc-0.9991.tar.gz runterladen. Nur leider für Linux nicht als installierbares Paket, sondern nur als Source-Code-tar-file. Aber im Paket sind auch Debian-Infos enthalten.... nur kann ich das wiederum mangels Kenntnisse nicht "übersetzen"
Ist das was kompliziertes, dieses Programm zum funktionierenden ODBC-Treiber zu kompilieren?
Der erste Ansatz war leider nicht so ergiebig... .... das lag aber auch ein wenig am Fehlen der tatsächlichen Notwendigkeit für diese Aktion. Das ältere Programm lief ja, und ich weiß nicht einmal, ob die höhere Version merkbare Verbesserungen beinhaltet hat. Nun ja... seis drum....
Ich habe aber an anderer Stelle ein Problem, was mich schon sehr beschäftigt, und was momentan für eine für mich unbefriedigende Situation sorgt. Ich muss derzeit zum Arbeiten mit meinen Datenbanken wegen diesem Fehler im ODBC-Treiber Jessie runterfahren und mit Windows arbeiten.
Im Bugreport (ganz unten am Ende) sagt Ch. Werner jedoch, dass der Fehler in der aktuellen Version 0.9991 behoben ist.... und diese aktuelle Version kann man einfach auf seiner Web-Site als Source-Code-Paket sqliteodbc-0.9991.tar.gz runterladen. Nur leider für Linux nicht als installierbares Paket, sondern nur als Source-Code-tar-file. Aber im Paket sind auch Debian-Infos enthalten.... nur kann ich das wiederum mangels Kenntnisse nicht "übersetzen"
Ist das was kompliziertes, dieses Programm zum funktionierenden ODBC-Treiber zu kompilieren?
Re: [gelöst] Sourcecode kompilieren
Da der Download von der Webseite schon alle Debian Metadaten enthält, kannst Du leicht daraus direkt ein Debian Paket erstellen.
Dazu musst Du das Archiv "sqliteodbc-0.9991.tar.gz" entpacken und danach in das darin enthaltene Verzeichnis "sqliteodbc-0.9991"
wechseln. Dort rufst du dpkg-buildpackage auf (ist im Paket dpkg-dev enthalten, falls noch nicht installiert).
Der Aufruf sieht zum Beispiel so aus: dpkg-buildpackage -b -us -uc (siehe man dpkg-buildpackage).
Dazu musst Du das Archiv "sqliteodbc-0.9991.tar.gz" entpacken und danach in das darin enthaltene Verzeichnis "sqliteodbc-0.9991"
wechseln. Dort rufst du dpkg-buildpackage auf (ist im Paket dpkg-dev enthalten, falls noch nicht installiert).
Der Aufruf sieht zum Beispiel so aus: dpkg-buildpackage -b -us -uc (siehe man dpkg-buildpackage).
Re: [gelöst] Sourcecode kompilieren
Das hat leider gar nicht geklappt. Ich habe aber dann zufällig im Readme die Build Instructions for Debian based systems gefunden:
Als Ergebnis wurden mir dann ein paar fehlende Abhängigkeiten angezeigt, die ich dann wie folgt nachinstalliert habe:
Und das war das Ergebnis... er meckert die SQLite4-Header an... von denen ich nicht weiss, was das ist... die aktuelle Version ist nämlich 3.8*.
Log von dpkg-buildpackage
Code: Alles auswählen
tar xzf sqliteodbc-*.tar.gz
cd sqliteodbc-*
./configure && make deb
Code: Alles auswählen
apt-get install libsqlite-dev
apt-get install libsqlite3-dev
apt-get install unixodbc-dev
apt-get install cdbs
Log von dpkg-buildpackage
- KBDCALLS
- Moderator
- Beiträge: 22441
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] Sourcecode kompilieren
Es müssen dann aber noch alle Build-depends erfüllt werden. Bevor man kompilieren kann.
dpkg-checkbuilddeps
fehlt was wirds ausgespuckt.
Das kann dann so ausehen
Das ruft man an der gleichen Stelle wie dpkg-buildpackage.
dpkg-checkbuilddeps
fehlt was wirds ausgespuckt.
Das kann dann so ausehen
Code: Alles auswählen
root@tatjana:/usr/src/sqliteodbc-0.9991.orig# dpkg-checkbuilddeps
dpkg-checkbuilddeps: Nicht erfüllte Bauabhängigkeiten: libsqlite-dev unixodbc-dev
root@tatjana:/usr/src/sqliteodbc-0.9991.orig#
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
- KBDCALLS
- Moderator
- Beiträge: 22441
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] Sourcecode kompilieren
Es läßt sich ohne Problem mit dpkg-buildpackage oder pbuilder bauen
Das Log von pdebuild
sqliteodbc_0.9991-1_amd64.build
Das Log von pdebuild
sqliteodbc_0.9991-1_amd64.build
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: [gelöst] Sourcecode kompilieren
Ja, habs gemacht und es wurde ein fehlender debhelper bemängelt. Mit der Fehlermeldung habe ich dann was im Web gefunden.... war ja auch nur ein apt-get install.
Und weiter unten im Link ist das Ergebnis nach dem ./configure && make deb. Danach habe ich eine neue Datei gefunden, eine, die ich vorher nicht hatte: libsqliteodbc_0.9991-1_amd64.deb. Die Dateigröße beträgt 137,1 KB. Wie kann ich überprüfen, ob das plausibel ist. Ich bin noch ein wenig skeptisch bis zum dpkg -i
Ist das Build-Log ok? Ausser ein paar Warnungen und einem ignorierten Fehler kann ich hier nix herauslesen.
Noch ein Nachtrag... die laut Doku angegebenen Build-Hinweise haben bei mir nicht funktioniert, es wurden immer die Sqlite4-Header bemängelt. Ich habe dann mal nach sqlite4 gesucht und dazu was Configure-Srcipt gefunden. Der geteilte Aufruf von configure und make deb war dann erfolgreich....zumindes habe ich eine deb mit 137.1 kb größe.
Und weiter unten im Link ist das Ergebnis nach dem ./configure && make deb. Danach habe ich eine neue Datei gefunden, eine, die ich vorher nicht hatte: libsqliteodbc_0.9991-1_amd64.deb. Die Dateigröße beträgt 137,1 KB. Wie kann ich überprüfen, ob das plausibel ist. Ich bin noch ein wenig skeptisch bis zum dpkg -i
Ist das Build-Log ok? Ausser ein paar Warnungen und einem ignorierten Fehler kann ich hier nix herauslesen.
Noch ein Nachtrag... die laut Doku angegebenen Build-Hinweise haben bei mir nicht funktioniert, es wurden immer die Sqlite4-Header bemängelt. Ich habe dann mal nach sqlite4 gesucht und dazu was Configure-Srcipt gefunden. Der geteilte Aufruf von configure und make deb war dann erfolgreich....zumindes habe ich eine deb mit 137.1 kb größe.
Code: Alles auswählen
./configure --with-sqlite3=DIR
make deb
Zuletzt geändert von TomL am 17.02.2015 21:27:21, insgesamt 1-mal geändert.
- KBDCALLS
- Moderator
- Beiträge: 22441
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] Sourcecode kompilieren
Dafür haben wir aber auch unser eigenes NoPpaste.TomL hat geschrieben: Sorry.... hab das BuildLog hier wieder entfernt.... ist ja ne optische Katastrophe im Thread..... ... hier ist das Buildlog jetzt gespeichert.
Da lassen dich sogar die Dateien hochladen. Nur bei der Dateiendung wirds manchmal etwas problematisch. Nicht jede wird akzeptiert. Hatte übrigens eins stillschweigend dahinverfrachtet.
PS: Eigentlich ist Möglichkeit mit den Codetags für maximal 20 Zeilen vorgesehen.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: [gelöst] Sourcecode kompilieren
Danke! Das kannte ich noch nicht. Ich habe zwar die Änderung in dem älteren Post gesehen, aber ich hatte nicht gedacht, dass ich das selber einstellen kannKBDCALLS hat geschrieben:Dafür haben wir aber auch unser eigenes NoPpaste.
Und ich habe noch 'ne Verständnisfrage. Früher und mit meinem Visual-C++-Compiler unter Windows wurden vom Compiler *.Obj-Files erzeugt, für jedes Source-Code-File eines. Anschließend wurden alle *.obj's plus diverser Static- und Dynamic-Libs "gelinkt". Am Ende kam ne *.exe raus. Was und wie macht das eigentlich der C-Compiler unter Linux? In dem Verzeichnis finde ich irgendwie nix, was aufschlussreich ist. Erzeugt der keine *.obj's und darüber hinaus das Äquivalent einer Exe?
Re: [gelöst] Sourcecode kompilieren
Der erzeugt als Zwischenschritt auch entsprechende Files und linkt sie anschließend. Möchtest du die Files in dem Status haben, kannst du den Compiler anweisen, an der Stelle abzubrechen.
Re: [gelöst] Sourcecode kompilieren
Während des Entwickelns habe ich das Projekt früher immer inkrementell erzeugt. Das bedeutet, es wurden nur die geänderten Module kompiliert und das Projekt wurde ebenso nur inkrementell gelinkt. Während dieser Zeit hatte ich 2 "Create-Dirs", eins mit Debug-Symbolen und das Release-Directory. Aber in beiden Verzeichnissen hatte ich immer die ganzen Zwischenstände gespeichert, also alle Objects, vorkomplilierte Header, Resourcenfiles, Buildslogs und die Exe. Aber hier in dem ODBC-Verzeichnis ist nix. Wird bei jeder Änderung im Source-Code immer alles neu kompiliert oder ist das jetzt nur hier beim Konsolen-Projekt so und eine IDE handelt das dann anders?niemand hat geschrieben:Der erzeugt als Zwischenschritt auch entsprechende Files und linkt sie anschließend. Möchtest du die Files in dem Status haben, kannst du den Compiler anweisen, an der Stelle abzubrechen.
Re: [gelöst] Sourcecode kompilieren
Das haengt in erster Linie davon ab, wie der Compiler aufgerufen wird, was wiederum meist in einem Makefile steht (welches von make(1) ausgewertet und ausgefuehrt wird).TomL hat geschrieben:Wird bei jeder Änderung im Source-Code immer alles neu kompiliert oder ist das jetzt nur hier beim Konsolen-Projekt so und eine IDE handelt das dann anders?
Das Prinzip ist exakt dasselbe, was du schon kennst: gcc -c linkt nicht, sondern erzeugt *.o-Objektdateien. Das Caching und die damit einhergehende Beschleunigung des Gesamtbuilds bei kleinen Aenderungen funktioniert genauso.
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier