Seite 1 von 1

Kompilieren und Linken über Kommandozeile

Verfasst: 24.04.2016 00:20
von roc_p2
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

Verfasst: 24.04.2016 13:33
von edel
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.

Re: Kompilieren und Linken über Kommandozeile

Verfasst: 24.04.2016 14:05
von Sicro
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.

Re: Kompilieren und Linken über Kommandozeile

Verfasst: 24.04.2016 14:11
von roc_p2
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.

Re: Kompilieren und Linken über Kommandozeile

Verfasst: 24.04.2016 19:42
von edel
Du kannst sie auch direkt entpacken :

(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

Verfasst: 24.04.2016 23:24
von roc_p2
Herzlichen Dank!

Re: Kompilieren und Linken über Kommandozeile

Verfasst: 25.04.2016 09:46
von NicTheQuick
Bleibt die Frage, ob man das laut Lizenz darf. Vielleicht vorher nochmal durchlesen?

Re: Kompilieren und Linken über Kommandozeile

Verfasst: 25.04.2016 12:55
von edel
Dafuer muesste man erst einmal wissen wo man lesen sollte 8)
Hast du ein Link?

Re: Kompilieren und Linken über Kommandozeile

Verfasst: 25.04.2016 13:09
von NicTheQuick
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.