PureBoard
http://forums.purebasic.com/german/

Kompilieren und Linken über Kommandozeile
http://forums.purebasic.com/german/viewtopic.php?f=28&t=29598
Seite 1 von 1

Autor:  roc_p2 [ 24.04.2016 00:20 ]
Betreff des Beitrags:  Kompilieren und Linken über Kommandozeile

Durch Angabe der Option "-c" mit dem pbcompiler wird eine Assembler-Datei (.asm) erstellt. Ich habe nun erfolglos versucht, ausgehend von dieser Datei in OSX (64bit) eine ausführbare Datei mit dem Assembler (yasm) und Linker (ld) von der Kommandozeile zu erstellen. Zwar kann lässt sich die Assembler-Datei mit yasm fehlerlos Kompilieren, den erhaltenen Objektcode konnte ich aber bisher mit ld nicht linken. Ich vermute, man müsste diesen mit den richtigen Libraries linken, bin aber aus den vorhandenen Dateien im Ordner "purelibraries" nicht schlau geworden. Bin um jeden Hinweis mit einfachem Beispiel zur Benutzung von "pbcompiler -c", "yasm" und "ld" froh, danke im Voraus.

Autor:  edel [ 24.04.2016 13:33 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

Ich weiss nicht genau wie es unter MAC OS ist, aber unter Windows und Linux beinhalten die Dateien im purelibraries Ordner die eigentliche statische Bibliothek. In der Datei stehen, neben den benoetigten Libs, die Information welche Funktionen es in der Lib gibt, die Hilfedatei usw, danach kommt die statische Lib (vor laengerer Zeit mit Xor verschluesselt).

Der Kompiler von Purebasic entpackt die statische Lib beim kompilieren in ein temporaeres Verzeichnis und von dort aus werden sie gelinkt. Wenn du also in diesen Prozess eingreifst, kannst du sie dir heraus kopieren, bevor Purebasic sie wieder loescht. Unter Windows wuerde man z.B. einfach die Fasm.exe durch ein Programm ersetzen, das nur eine MessageBox anzeigt und somit das kompilieren pausiert. Damit hast du die Moeglichkeit die Libs zu kopieren.

Wenn du allerdings nur etwas am ASM Code aendern moechtest, gibt es einen Schalter (reasm) fuer den Purebasic Kompiler, der den Code wieder kompilieren kann.

Autor:  Sicro [ 24.04.2016 14:05 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

edel hat geschrieben:
Wenn du allerdings nur etwas am ASM Code aendern moechtest, gibt es einen Schalter (reasm) fuer den Purebasic Kompiler, der den Code wieder kompilieren kann.
Den gibt es nur bei der Windows-Version.

Autor:  roc_p2 [ 24.04.2016 14:11 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

Danke, ich hatte mir inzwischen mit der Aktivitätsanzeige auf den pbcompiler alle Lese-/Schreibzugriffe für den gesamten Vorgang anzeigen lassen, und diese bestätigen deine Anmerkungen.

Danke auch für den Tipp, wie ich den Vorgang allenfalls pausieren kann. Ich probiere sicher auch noch zusätzlich, ob sich die statischen Bibliotheken alle sonstwie entpacken lassen (im compiler Ordner sehe ich Programme wie pblibrarymaker und pbsoimporter, diese tönen erfolgsversprechend).

Betreffend den reasm Schalter hatte ich gemäss Programmhilfe verstanden, dass es diesen nur für die Windows Version gibt (ist unter "Windows spezifische Kommandozeilen-Parameter" aufgelistet); probieren kann ich es aber trotzdem.

Autor:  edel [ 24.04.2016 19:42 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

Du kannst sie auch direkt entpacken :

(64 bit)

Code:
Procedure UnPackPBLib(*buffer.long,*size.long)
   Protected magic.l = $C3500
   Protected ende.l
   Protected start.l   
 
   *buffer  + PeekL(*buffer+4) + 12   
   size     = PeekL(*buffer+4)   
   *buffer  + 12
    start.l = *buffer      
    ende.l  = *buffer + size
    
   While *buffer <= ende
      *buffer\l =~ *buffer\l
      *buffer\l - magic
      magic + size      
      *buffer + 4
   Wend 
   
   *size\l = size
   ProcedureReturn start
EndProcedure

#PB_LIB = "purelibraries\gadget"

file = ReadFile(-1,"purelibraries\" + #PB_LIB)
 
If file
   
   size    = Lof(file)    
   buffer = AllocateMemory(size)
   If ReadData(file,buffer,size)
      CloseFile(file)
      lib = UnPackPBLib(buffer,@size)
      file = CreateFile(-1,"desktop/" + #PB_LIB + ".a")
      If file 
         WriteData(file,lib,size)
         CloseFile(file)
      EndIf 
      FreeMemory(buffer)
   EndIf 
   
EndIf

Autor:  roc_p2 [ 24.04.2016 23:24 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

Herzlichen Dank!

Autor:  NicTheQuick [ 25.04.2016 09:46 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

Bleibt die Frage, ob man das laut Lizenz darf. Vielleicht vorher nochmal durchlesen?

Autor:  edel [ 25.04.2016 12:55 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

Dafuer muesste man erst einmal wissen wo man lesen sollte 8)
Hast du ein Link?

Autor:  NicTheQuick [ 25.04.2016 13:09 ]
Betreff des Beitrags:  Re: Kompilieren und Linken über Kommandozeile

In der Hilfe gibt es den Punkt "Rechtliches". Da steht aber nicht wirklich viel. Ich vermute eine richtige Lizenz fehlt hier schlicht. Keine Ahnung, wie das dann einzuordnen ist.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/