”Cross-Compiling" mit Ubuntu für x86-NAS

  • Hallo,


    wie kompiliere ich vorhandenen Quellcode so, dass er auf meinem NAS läuft?
    (Bei mir ein TS-239 Pro, entscheidet ist hierbei aber ja nur, dass es sich um ein x86 NAS handelt)


    Konkret geht es um das Programm GOCR, meine Frage zielt aber eher auf das grundsätzliche Vorgehen ab.
    Bisher habe ich den Quellcode von SourceForge in einer aktuelle Ubuntu VM kompiliert (das übliche "./configure" und "make", die Architektur ist ja die gleiche) und das Binär-File auf das NAS kopiert. Ein Ausführen dort ergibt dann:


    Code
    # ./gocr
    ./gocr: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./gocr)


    Das Problem liegt also bei der GLIBC deren Version auf dem NAS zu alt ist. Ein Updaten der GLIBC auf dem NAS ist nicht so das wahre, also müsste schon dem Compiler gesagt werden was er benutzen darf und was nicht. Hat da jemand eine Idee?

  • Hi


    Du kannst versuchen, das Programm direkt auf dem Qnap zu kompilieren.
    Mit Optware kannst du eine Compiler installieren.


    Gruss
    Waven

  • Wobei Du dir die Arbeit sparen kannst ein OCR für das NAS zu kompilieren, denn leider gibt's für Linux noch keine Gescheite OCR, die auch prima mit deutschen Inhalten umgehen kann. Darum gibt's auch kein DMS mit OCR für Linux (meist läuft die OCR Geschichte dann auf einen Win / OS X Server).


    Das einzigste Produkt wäre die Abbyy Finereader SDK für Linux. Preislich halt dann doch was anderes... Und ist auch halt nur 'ne SDK. ;)


    Grüsse, Daivd

  • GOCR sollte nur ein Beispiel sein! Benötigt wird das z.b. von FritzLoad.


    Also gibt es keine Alternative zum kompilieren auf dem NAS direkt?
    Den gcc habe ich in Optware gefunden, den g++ dann schon nicht mehr. Sicherlich hat der gcc auch wieder eine Menge Abhängigkeiten die dann fehlen.


    Die GLIBC ist abwärts kompatibel, also müsste man dem Compiler mitgeben gegen welche Version er linken darf. Geht das irgendwie?

  • Okaydokay. :thumb:
    Ich bin deshalb eh eher so der Typ, der eine Distri für's Kompilieren vorzieht. Bei den Optware Paketen weiss man halt nie, ob etwas fehlt oder nicht. (Beim Compiler).


    Am besten dafür 'ne VM aufmachen, damit Du dir deinen Client nicht unnötig zumüllst... ;)
    Du kannst auch mehrere libc Versionen haben (also unterschiedliche). Wenn es das nicht mehr als fertiges Paket gibt, musst Du dir den auch noch selbst kompilieren. :(
    Das musst Du nur vorher in den CFLAGS und LDFLAGS definieren....
    *Überleg* Eigentlich müsste es dann auch via LD_LIBRARY_PATH gehen.... Wäre ja noch eleganter. ;)


    Einen Offiziellen Toolchain gibt's von QNAP leider nicht. Ich hätte aber gerne einen, da mir das gleiche auf den Keks geht. Und mein Crosscompiler (habe hier noch eine Debian VM), ist zu alt. Den wollte ich eh mal irgendwann aktualisieren. Sonst hätte ich Dir den mal Hochladen können.


    Grüsse, David


    P.S: Falls jemand zur Cebit geht, bitte mal QNAP direkt ansprechen, warum es keinen Toolchain gibt. Wäre so einfacher. :thumb:

  • Habe es nun am laufen!


    Grob skizziert am Beispiel von GOCR:


    • Debian VM mit GCC und G++, sowie Standard-Kleinkram augesetzt
    • GLIBC 2.6.1 heruntergeladen: http://ftp.gnu.org/gnu/glibc/glibc-2.6.1.tar.gz (die ist aktuell in 3.2.3 Build 0209T)
    • GLIBC kompiliert
    • GOCR: ./configure --with-netpbm=/root/netpbm-10.35.73 (damit netpbm Support in GOCR)
    • im durch ./configure erstellten Makefile die "LDFLAGS" ergänzt um: -L/root/glibc-2.6.1/build (sprich den Pfad zum kompilierten GLIBC)
    • GOCR kompilieren


    Inwiefern das auch allgemein gilt weiß ich nicht, FritzLoad läuft nun und knackt Captchas... 8-)


    Noch als Ergänzung die ldd-Ausgabe der laufenden Binary und dem ersten Versuch (ohne eigene GLIBC):

  • Na wunderbar. Wenn Du magst kannst Du ja ein ipkg draus machen, und des in der Optware zu Verfügung stellen 8-)


    Mache ich hin und wieder auch mal. :thumb:


    Grüsse, David