2009-04-13 5 views
0
gedruckt bekommen

Ich habe ein gemeinsames Objekt, das ich auf Windows erstellen mit Real Blick Entwickler-Suite-Tool verknüpfen Befehl auf Windows Host-printfs in einem gemeinsamen Objekt (dynamische Bibliothek) nicht

armlink -o mylib.so < „my * .o Dateien hier gegeben ">

Dann verknüpfe ich eine Anwendung mit diesem mylib.so shared library unter Linux mit GCC-Tools.

Ich habe printf Aussagen innerhalb von Funktionen in diesem mylib.so, aber wenn ich die endgültige ausführbare Datei ausführen, ich keine printf Ausgaben auf der Konsole bekommen. (Stdio.h inlcuded ist überall dort, wo printfs genannt werden)

So Gibt es ein bekanntes Problem mit gemeinsam genutzten Bibliotheken, die dazu führen, dass printf oder Systemfunktionen/Systemaufrufe/Laufzeitbibliotheksfunktionen nicht korrekt funktionieren?

Oder hat das mit meinem eigenartigen Setup zu tun, eine gemeinsame Bibliothek auf Windows-basierte Compiler-Tool-Kette zu machen, sondern diese gemeinsame Bibliothek mit einer Anwendung auf Linux-GCC-Compiler-Tools zu verknüpfen?

Vielen Dank.

-AD

Antwort

0

Da Ihr Ziel ist arm, und ich nehme an, das C ist es kein Problem sein sollte, einige Dateien auf Windows und verknüpfen Sie dann auf Linux zu kompilieren. Hast du das aber verifiziert? Ich würde vorschlagen, eine hello.so auf Fenstern zu machen, von hello.c verbunden:

#include <stdio.h> 
void hello(void) {printf("Hello\n");} 

und dann von main.c auf Linux Haupt verlinken:

void hello(void); 
int main(int argc, char *argv[]){ hello(); return 0; } 

als Mindest Compiler Kettentest.


Wenn Sie printf aus Code aufrufen in in Ihrer endgültigen ausführbaren definiert (das heißt nicht-Code aus Ihrer gemeinsam genutzten Bibliothek) erhalten Sie eine Ausgabe aus, dass?


Does

strings --print-file-name -a mylib.so final_executable | grep "string from printf in shared library" 

Rückkehr zwei occurenses?


Gibt es Referenzen in

readelf -a mylib.so 
readelf -a final_executable 

printf?

+0

@hlovdal: Die printfs, die sich in main/application befinden, werden korrekt gedruckt, nur die in der shared library geben nichts aus. Auch die Erstellung der Bibliothek und das Verknüpfen mit ausführbaren Dateien geschieht korrekt, denke ich. Ich überprüfe 'readelf', 'strings --printf ..' Ausgaben. -AD – goldenmean

Verwandte Themen