Dateien in die auszuführende Datei einfügen.



  • Wenn du auf Unix und im Zweifel bist, dann man dir einen Ordner in /opt. Dort darfst du machen, was du willst. Also die große Datei dorthin.

    Bleibt das Problem, wie man den Pfad aus dem Code herausbekommt. Man könnte den zB bei jedem Aufruf als Command-Line-Argument mitgeben. Schlauer ist es wahrscheinlich, eine (kleine) Konfigurationsdatei anzulegen, in der der Pfad steht, und also auch vom User/Administrator verändert werden kann. Also diese Datei ins Userverzeichnis oder in ein globales Verzeichnis, aber dann so, daß man die Konfigurationsdatei vom Binary mit einem relativen Pfad erreicht. So würde ich das auf den ersten Blick machen. Ich hab natürlich bemerkt, daß du das Ding im Binary haben willst, aber das ist wahrscheinlich eine schlechte Sache.

    Erstens bezweifle ich dass Zeile 28 und 29 auf das gleiche hinauslaufen.

    Wahrscheinlich tun sie das nicht. Aber mir ist schleierhaft, was save_lib() eigentlich tun soll.

    Zweitens wäre es schön wenn die Länge meines char arrays dynamisch festgelegt werden könnte...

    Dann mach statt einem Array einen Zeiger auf char, und gib ihm gleich angangs Speicher mit man: malloc.



  • Danke für die Antwort!
    Zur zeit steht der Pfad in der Configurationsdatei. Das Programm soll auf jedem beliebigem Rechner laufen ohne daß jedes mal diese Datei hinterlegt werden muss.
    Es ist in diesem fall besser ein 10Mb Programm zu haben als ein 100k Programm + eine 10 Mb Datei!
    save_lib() öffnet die binäre Datei, zählt die Zeichen, legt ein Array mit dieser größe an und füllt es mit den Zeichen aus der Datei.

    Vermutlich wird der Plan aber so nicht aufgehen, oder?



  • Es ist in diesem fall besser ein 10Mb Programm zu haben als ein 100k Programm + eine 10 Mb Datei!

    Ich glaube eben, daß das ganz egal ist. Ausliefern wirst du das Ding sowieso als tar.gz oder dergleichen.

    Das Programm soll auf jedem beliebigem Rechner laufen ohne daß jedes mal diese Datei hinterlegt werden muss.

    Binärkompatibilität unter den Linux-Varianten ist so eine Sache. Dafür kann man damit rechnen, daß sie alle einen C-Compiler haben. Nach meiner Erfahrung ist es besser, gleich nur den Quellcode auszuliefern; sonst müßtest du am Ende noch die richtige Version der C-Bibliotheken mitliefern, weil wohl kaum alle Rechner die gleiche verwenden.

    save_lib() öffnet die binäre Datei, zählt die Zeichen, legt ein Array mit dieser größe an und füllt es mit den Zeichen aus der Datei.

    Also doch das Gegenteil von "save" 😉 .

    Vermutlich wird der Plan aber so nicht aufgehen, oder?

    Doch, doch, das kann man machen. Zumindest die Sache mit den Bibliotheken kann man in den Griff kriegen, indem man statisch dazulinkt. Das bläst das Binary aber nur noch mehr auf. Bleiben als Problem immer noch andere Architekuren/Betriebsysteme. Es hat schon seine Gründe, daß man gerne die Quelltexte ausliefert, wenn das möglich ist. Und dann könnte das Makefile sich um alles kümmern.


Anmelden zum Antworten