mplayer problem

Giorgos Keramidas keramida at ceid.upatras.gr
Fri Nov 25 21:16:53 EET 2005


On 2005-11-25 18:23, "P. Christeas" <p_christ at hol.gr> wrote:
> Ίσως αν και το binary του mplayer ήταν 32-bit, να έπαιζε με τα
> codecs. Αλλά στο Linux, όταν μιλάμε για 64-bit εννοούμε να παίζουν
> όλες οι εφαρμογές στα 64.

Με λίγο προσπάθεια γίνονται και τα δύο.  Αρκεί να έχεις τις
απαραίτητες runtime libraries τόσο σε 32-bit όσο και σε 64-bit
binaries.  Στο Solaris αυτό γίνεται βάζοντας τις 32-bit libs στο
/usr/lib και τις 64-bit libs στο /usr/lib/64.  Στο FreeBSD που
μπορώ να δοκιμάσω άμεσα εδώ πέρα, το ίδιο πράγμα γίνεται με τις
'native' βιβλιοθήκες στο /usr/lib (32-bit σε i386, 64-bit σε
amd64) και ειδικά για τα 64-bit amd64 συστήματα υπάρχει το
/usr/lib32 με τις 32-bit runtime compatibility libs.

Αρα γίνεται αυτό που λες.  Ενα εξαιρετικά απλό παράδειγμα, με
χρήση της επιλογής -m32 και -B του gcc φαίνεται παρακάτω.

Πριν μου πει κανείς "τι λε ρε φιλαράκι, εγώ δεν αγόρασα το
σούπερ-ντούπερ 64-bit γαϊδούρι για να τρέχω τα ίδια 32-bit
binaries", δε με νοιάζει.  Μέχρι να μπορούμε να τρέξουμε ΟΛΑ τα
προγράμματα σε 64-bit builds, λίγη συμβατότητα δεν είναι άσχημη :-)

Sources
*******

    flame:/tmp/foo$ cat -n Makefile
         1  PROG=   foo
         2  NO_MAN= If you need a manpage for this, something's wrong.
         3
         4  WARNS?= 6
         5
         6  .include <bsd.prog.mk>
    flame:/tmp/foo$ cat -n foo.c
         1  #include <stdio.h>
         2  #include <stdlib.h>
         3
         4  int
         5  main(void)
         6  {
         7
         8      printf("Hello world\n");
         9      return EXIT_SUCCESS;
        10  }
    flame:/tmp/foo$

64-bit πρόγραμμα σε 64-bit σύστημα
**********************************

Χωρίς ιδιαίτερες παραμέτρους, παρά μόνο με αυτές που ενεργοποιεί
το WARNS=6 make var για τα standard FreeBSD builds, το binary που
δημιουργείται και τρέχει είναι 64-bit ELF για AMD:

    flame:/tmp/foo$ make clean all
    rm -f foo foo.o
    Warning: Object directory not changed from original /tmp/foo
    cc  -Wsystem-headers -Werror -Wall \
        -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes \
        -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual \
        -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter \
        -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls \
        -c foo.c
    cc  -Wsystem-headers -Werror -Wall \
        -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes \
        -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual \
        -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter \
        -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls \
        -o foo foo.o
    flame:/tmp/foo$ file foo
    foo: ELF 64-bit LSB executable, AMD x86-64, version 1 (FreeBSD), \
        dynamically linked (uses shared libs), not stripped
    flame:/tmp/foo$ ./foo
    Hello world
    flame:/tmp/foo$

32-bit πρόγραμμα στο ίδιο 64-bit σύστημα
****************************************

Με προσθήκη 2 μόνο options στο environment του build, το binary
που δημιουργείται είναι 32-bit i386.

Τα options έχουν γίνει wrap στο ίδιο σημείο, για να φαίνεται ότι
η μόνη διαφορά είναι βασικά τα έξτρα CFLAGS που περνάω στο
environment του make(1) την ώρα της μεταγλώττισης.

    flame:/tmp/foo$ env CFLAGS='-m32 -B/usr/lib32' make clean all
    rm -f foo foo.o
    Warning: Object directory not changed from original /tmp/foo
    cc  -m32 -B/usr/lib32 \
        -Wsystem-headers -Werror -Wall \
        -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes \
        -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual \
        -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter \
        -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls \
        -c foo.c
    cc  -m32 -B/usr/lib32 \
        -Wsystem-headers -Werror -Wall \
        -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes \
        -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual \
        -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter \
        -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls \
        -o foo foo.o
    flame:/tmp/foo$ file foo
    foo: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), \
       dynamically linked (uses shared libs), not stripped
    flame:/tmp/foo$ ./foo
    Hello world
    flame:/tmp/foo$




More information about the Linux-greek-users mailing list