Dateien in die auszuführende Datei einfügen.



  • 10 MB ist schon eine Bibliothek von einer Bibliothek 🕶

    Sind es Daten nimm eine Datenbank. Ist es Code müßte es schon das
    halbe Kernel sein ...



  • 10 MB ist doch in der heutigen Zeit nicht viel, also dafür brauchst du keine Datenbank. Es ist völlig in Ordnung wenn du eine Datei anhängst die die Größe eines Emailanhanges haben könnte.



  • Das würde ich lieber in einer separaten Datei lassen.

    Ich auch. Am Ende will noch jemand die Datei verändern...



  • lin123 schrieb:

    bin mir nicht sicher ob das so klappt...

    Ich auch nicht, vor allem frage ich mich gerade wie du die
    Bibliothek benutzen willst, wenn sie in einem char* string
    gekapselt ist.



  • ch auch nicht, vor allem frage ich mich gerade wie du die
    Bibliothek benutzen willst, wenn sie in einem char* string
    gekapselt ist.

    Na, 8 Bit processing ... :p



  • Scheppertreiber schrieb:

    ch auch nicht, vor allem frage ich mich gerade wie du die
    Bibliothek benutzen willst, wenn sie in einem char* string
    gekapselt ist.

    Na, 8 Bit processing ... :p

    Ich stelle mir gerade vor es handelte sich um eine Bibliothek a la
    my_lib.lib, die man dem Linker verklickert und mit #include "my_lib.h" einbindet.

    Aber da bin ich wohl nicht mehr up to date.
    :p



  • so, ich bin hier ein bisschen weiter gekommen!
    also das Programm geht, aber leider immernoch mit dem verweis auf die externe Datei mithilfe der pfad angabe.

    Zur Zeit geht es folgendermaßen

    void funktion(char pfad[200]){
    ....
    char *LIB = pfad; // Pfad zu der Bibliothek
    ...
    }
    

    Hier kommt die Baustelle: Weil die auszuführende Datei diese Bibliothek beinhalten soll, habe ich versucht die komplette Datei in einem char array abzuspeichern.

    char* save_lib(char xxx[200]){
    	printf("save_lib\n");
    	int c = 0;
    	int i = 0;
    	int numchar = 0;
    	FILE * pFile;
    	pFile=fopen (xxx,"r");
    	if (pFile==NULL) perror ("Error opening file");
    	else
    	{
    	  do {
    	    c = fgetc (pFile);
    	    numchar++;
    	  } while (c != EOF);
    	}
    	printf("number of char: %i ",numchar);
    	//const int size = numchar;
    	const int size = 155697;
    	char lib[size];
    	rewind(pFile);
    	for (i=0;i<size;i++) lib[i]=(char)fgetc(pFile);
    	fclose(pFile); 
    	return(lib);
    }
    ....
    void funktion(char pfad[200]){
    ....
    //char *LIB = pfad; // Pfad zu der Bibliothek
    char *LIB = save_lib(pfad);
    ...
    }
    

    Erstens bezweifle ich dass Zeile 28 und 29 auf das gleiche hinauslaufen.
    Zweitens wäre es schön wenn die Länge meines char arrays dynamisch festgelegt werden könnte...
    freue mich auf eure Tipps!
    Gruß,
    Lin



  • 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