Kompilieren und Linken über Kommandozeile
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.
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.
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.
Re: Kompilieren und Linken über Kommandozeile
Den gibt es nur bei der Windows-Version.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.
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
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.
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.
Re: Kompilieren und Linken über Kommandozeile
Du kannst sie auch direkt entpacken :
(64 bit)
(64 bit)
Code: Alles auswählen
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
Re: Kompilieren und Linken über Kommandozeile
Herzlichen Dank!
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Kompilieren und Linken über Kommandozeile
Bleibt die Frage, ob man das laut Lizenz darf. Vielleicht vorher nochmal durchlesen?
Re: Kompilieren und Linken über Kommandozeile
Dafuer muesste man erst einmal wissen wo man lesen sollte
Hast du ein Link?
Hast du ein Link?
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
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.