[gelöst] Sourcecode kompilieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
TomL

[gelöst] Sourcecode kompilieren

Beitrag von TomL » 13.02.2015 12:31:02

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?
Zuletzt geändert von TomL am 14.02.2015 20:23:05, insgesamt 1-mal geändert.

Benutzeravatar
Dogge
Beiträge: 1895
Registriert: 13.09.2010 11:07:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Sourcecode kompilieren

Beitrag von Dogge » 13.02.2015 12:59:14

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.
Debian Testing + Gnome | Linux-Anfänger seit 04/2003
http://files.mdosch.de/2014-07/0xE13D657D.asc

DeletedUserReAsG

Re: Sourcecode kompilieren

Beitrag von DeletedUserReAsG » 13.02.2015 15:22:37

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.

JuergenPB

Re: Sourcecode kompilieren

Beitrag von JuergenPB » 13.02.2015 15:41:39

Beim Erstellen und Installieren eines Programms aus Sourcecode geht es in der Regel so.

ggf. Archiv entpacken und dann

Vorbereiten

Code: Alles auswählen

./configure
„Machen“ Installieren

Code: Alles auswählen

make install
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/

TomL

Re: Sourcecode kompilieren

Beitrag von TomL » 13.02.2015 15:44:22

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.
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.

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.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Sourcecode kompilieren

Beitrag von eggy » 13.02.2015 16:35:37

Magst uns nicht verraten was xyz-Programm ist?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Sourcecode kompilieren

Beitrag von Cae » 13.02.2015 17:19:56

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
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

KP97
Beiträge: 3440
Registriert: 01.02.2013 15:07:36

Re: Sourcecode kompilieren

Beitrag von KP97 » 13.02.2015 17:49:07

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.

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22359
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: Sourcecode kompilieren

Beitrag von KBDCALLS » 13.02.2015 18:20:07

Mit Debiancheckinstall 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. Debiandebhelper und Debiandevsripts

Dann gibt es noch die Doku Debianmaint-guide , Debianmaint-guide-de und Debianpackaging-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:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

KP97
Beiträge: 3440
Registriert: 01.02.2013 15:07:36

Re: Sourcecode kompilieren

Beitrag von KP97 » 13.02.2015 18:24:12

KBDCALLS hat geschrieben:Mit Debiancheckinstall 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.....

TomL

Re: Sourcecode kompilieren

Beitrag von TomL » 14.02.2015 20:22:39

Vielen Dank für Eure Antworten, aber das übersteigt meine Möglichkeiten. :roll: 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.

TomL

Re: [gelöst] Sourcecode kompilieren

Beitrag von TomL » 17.02.2015 16:09:42

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.... :roll:

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?

dimi
Beiträge: 84
Registriert: 19.07.2006 14:09:55

Re: [gelöst] Sourcecode kompilieren

Beitrag von dimi » 17.02.2015 16:37:55

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).

TomL

Re: [gelöst] Sourcecode kompilieren

Beitrag von TomL » 17.02.2015 18:17:10

Das hat leider gar nicht geklappt. Ich habe aber dann zufällig im Readme die Build Instructions for Debian based systems gefunden:

Code: Alles auswählen

  tar xzf sqliteodbc-*.tar.gz
  cd sqliteodbc-*
  ./configure && make deb
Als Ergebnis wurden mir dann ein paar fehlende Abhängigkeiten angezeigt, die ich dann wie folgt nachinstalliert habe:

Code: Alles auswählen

apt-get install libsqlite-dev 
apt-get install libsqlite3-dev
apt-get install unixodbc-dev
apt-get install cdbs
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

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22359
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: [gelöst] Sourcecode kompilieren

Beitrag von KBDCALLS » 17.02.2015 18:24:48

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

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# 
Das ruft man an der gleichen Stelle wie dpkg-buildpackage.
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:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22359
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: [gelöst] Sourcecode kompilieren

Beitrag von KBDCALLS » 17.02.2015 18:44:00

Es läßt sich ohne Problem mit dpkg-buildpackage oder pbuilder bauen

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:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

TomL

Re: [gelöst] Sourcecode kompilieren

Beitrag von TomL » 17.02.2015 18:51:22

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.

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.

TomL

Re: [gelöst] Sourcecode kompilieren

Beitrag von TomL » 17.02.2015 20:40:32

ODBC-Problem gelöst.... :D ... funktioniert bestens :THX:

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22359
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: [gelöst] Sourcecode kompilieren

Beitrag von KBDCALLS » 17.02.2015 21:09:36

TomL hat geschrieben: Sorry.... hab das BuildLog hier wieder entfernt.... ist ja ne optische Katastrophe im Thread..... :facepalm: ... hier ist das Buildlog jetzt gespeichert.
Dafür haben wir aber auch unser eigenes NoPpaste.

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:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

TomL

Re: [gelöst] Sourcecode kompilieren

Beitrag von TomL » 17.02.2015 21:36:59

KBDCALLS hat geschrieben:Dafür haben wir aber auch unser eigenes NoPpaste.
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 kann :THX:

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?

DeletedUserReAsG

Re: [gelöst] Sourcecode kompilieren

Beitrag von DeletedUserReAsG » 17.02.2015 21:46:23

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.

TomL

Re: [gelöst] Sourcecode kompilieren

Beitrag von TomL » 17.02.2015 21:53:17

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.
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?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: [gelöst] Sourcecode kompilieren

Beitrag von Cae » 20.02.2015 06:53:04

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 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).

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

Antworten