32-bit Compilierung auf 64-bit System: cannot find -lcap

  • Ich versuche gerade, unter openSUSE 12.2 auf einem 64-bit-System VDR als 32-bit Applikation zu übersetzen (mit '-m32').
    Beim Linken bekomme ich die Meldung


    Code
    g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -rdynamic  audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o timers.o tools.o transfer.o vdr.o videodir.o -ljpeg -lpthread -ldl -lcap -lrt -lfreetype -lfontconfig    ./libsi/libsi.a -o vdr
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lcap
    collect2: error: ld returned 1 exit status


    Ich habe folgende Pakete installiert:


    libcap2-32bit-2.22-5.1.2.x86_64
    libpcap1-1.2.1-3.1.2.x86_64
    libcap2-2.22-5.1.2.x86_64
    libcap-devel-2.22-5.1.2.x86_64
    libcap-ng0-0.6.6-9.1.2.x86_64
    libcap-ng-devel-0.6.6-9.1.2.x86_64


    Leider sehe ich nicht, woran das liegen könnte.
    Hat hier vielleicht irgendwer eine Idee?


    Klaus

  • Leider sehe ich nicht, woran das liegen könnte.
    Hat hier vielleicht irgendwer eine Idee?


    Es sieht so aus als würde der Linker nach wie vor nur bei den 64 bit Libraries suche. Wo landen den die Files für 32bit? Vielleicht mit -L auf die richtige Idee bringen? Oder es ist eventuell eine -rpath Angelegenheit?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Vielleicht -lcap2?


    Warum versuchst Du denn VDR als 32bit Applikation zu übersetzen? Läuft doch hervoragend unter 64bit.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Vielleicht -lcap2?


    Außerordentlich unwahrscheinlich. Warum sollte die 32 Bit-Variante -lcap2 heißen und die 64 Bit-Version nur -lcap? Aus einem Paket mit Namen lcap2 kommen sie beide. Außerdem werden typischerweise die Versionsnummern an das .so-File hinten dran gehängt.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470


  • Es sieht so aus als würde der Linker nach wie vor nur bei den 64 bit Libraries suche. Wo landen den die Files für 32bit?


    Code
    lrwxrwxrwx 1 root root    14 Okt  7 11:55 /lib/libcap.so.2 -> libcap.so.2.22
    -rwxr-xr-x 1 root root 18088 Jul 15 20:14 /lib/libcap.so.2.22


    Zitat


    Vielleicht mit -L auf die richtige Idee bringen?


    Ich habe in der make.config


    CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -L/lib


    gesetzt, hat aber auch nichts geändert.


    Zitat


    Oder es ist eventuell eine -rpath Angelegenheit?


    Wie meinst du das?


    Klaus

  • Vielleicht -lcap2?


    Code
    g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -L/lib -rdynamic  audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o timers.o tools.o transfer.o vdr.o videodir.o -ljpeg -lpthread -ldl -lcap2 -lrt -lfreetype -lfontconfig    ./libsi/libsi.a -o vdr
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lcap2
    collect2: error: ld returned 1 exit status


    Zitat


    Warum versuchst Du denn VDR als 32bit Applikation zu übersetzen? Läuft doch hervoragend unter 64bit.


    Weil mein VDR momentan noch ein 32-bit-System hat, ich meinen Arbeitsrechner aber gerade auf 64-bit umstelle und gerne dort übersetzen möchte. Mittelfristig werde ich wohl auch meinen VDR mal auf 64-bit umstellen, aber eins nach dem andern ;)


    Klaus

  • Zeig doch mal den Inhalt des Paketes libcap2-32bit-2.22-5.1.2.x86_64. Die Files müssen doch woanders liegen als /lib. Da liegen natürlich die 64 Bit-Files.


    Wie meinst du das?


    -rpath ist eine Linker-Option, habe gerade keine Muße nachzulesen ob das hier eine Rolle spielt.
    Sieh mal nach bei man ld.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470


  • Du mußt von allen Paketen auch noch eine xxx-32bit installieren.


    Gruß
    e9hack

  • Zitat


    CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -L/lib


    Sind 32bit Libs dann nicht unter /lib32 ? Zumindest gibts solche Ordner auf meinem Debian 64bit System. Aber zugegeben, mit 32 bit Libs auf 64 bit hab ich mich nie beschäftigt.


    Die Libs in /lib existieren bei mir auch, sind dann aber die 64 bit Varianten nehme ich an.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Sind 32bit Libs dann nicht unter /lib32 ? Zumindest gibts solche Ordner auf meinem Debian 64bit System.


    Genau das wollte ich ja von kls wissen. Muss ja nicht alles wie bei Debian sein.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Zeig doch mal den Inhalt des Paketes libcap2-32bit-2.22-5.1.2.x86_64. Die Files müssen doch woanders liegen als /lib. Da liegen natürlich die 64 Bit-Files.


    Code
    > rpm -ql libcap2-32bit-2.22-5.1.2.x86_64
    /lib/libcap.so.2
    /lib/libcap.so.2.22


    Die 64-bit Libraries liegen unter /lib64 bzw. /usr/lib64.


    Zitat


    -rpath ist eine Linker-Option, habe gerade keine Muße nachzulesen ob das hier eine Rolle spielt.
    Sieh mal nach bei man ld.


    Mit


    CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -Xlinker -rpath=/lib


    bekomme ich ebenfalls

    Code
    g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -Xlinker -rpath=/lib -rdynamic  audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o timers.o tools.o transfer.o vdr.o videodir.o -ljpeg -lpthread -ldl -lcap -lrt -lfreetype -lfontconfig    ./libsi/libsi.a -o vdr
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lcap
    collect2: error: ld returned 1 exit status


    Klaus

  • Sorry, hätte nicht angenommen, dass die 32 Bit libs unter /lib landen.
    Der linker ignoriert den Pfad auch völlig und greift trotzdem auf die 64 Bit-Version zurück. Wenn du eine schnelle Lösung suchst, dann installiere dir SuSE 32 Bit in eine VirtualBox.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Du mußt von allen Paketen auch noch eine xxx-32bit installieren.


    YaST bietet mir nur diese libcap Pakete an:

    Code
    i  libcap-devel         Development files for libcap                          2.22        
    i  libcap-ng-devel      Header files for libcap-ng library                    0.6.6       
       libcap-ng-utils      Utilities for analysing and setting file capabilities 0.6.6       
    i  libcap-ng0           An alternate POSIX capabilities library               0.6.6       
       libcap-ng0-32bit     An alternate POSIX capabilities library               0.6.6       
       libcap-progs         Libcap utility programs                               2.22        
       libcap1              Library for Capabilities (linux-privs) Support        1.10        
       libcap1-32bit        Library for Capabilities (linux-privs) Support        1.10        
    i  libcap2              Library for Capabilities (linux-privs) Support        2.22        
    i  libcap2-32bit        Library for Capabilities (linux-privs) Support        2.22


    libcap2-32bit ist offensichtlich installiert.
    Ob ich libcap1/libcap1-32bit installiere oder nicht macht keinen Unterschied. Ebenso libcap-ng0-32bit.


    Klaus

  • Schau mal mit "ld -V", welche Emulationen bei dir unterstützt sind.


    Code
    root@homeserver:~# ld -V
    GNU ld (GNU Binutils for Debian) 2.22
      Supported emulations:
       elf_x86_64
       elf32_x86_64
       elf_i386
       i386linux
       elf_l1om
       elf_k1om


    Bei mir müsste es also -melf_i386 heissen. Hab ich irgendwo in nem Forum gefunden. http://ubuntuforums.org/showthread.php?t=1071816

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Suse vergißt einen Symlink von libpcap.so -> libpcap.so.1 unter /usr/lib zu erzeugen.


    libpcap ist ja ganz was anderes - sorry, ist mir oben reingerutscht, da ich nach "cap" gegrept hatte.


    Zitat


    libcap1-32bit muß aber installiert sein.


    Hab's versuchsweise auch mal installiert, macht aber keinen Unterschied.


    Klaus

  • Schau mal mit "ld -V", welche Emulationen bei dir unterstützt sind.


    Code
    root@homeserver:~# ld -V
    GNU ld (GNU Binutils for Debian) 2.22
      Supported emulations:
       elf_x86_64
       elf32_x86_64
       elf_i386
       i386linux
       elf_l1om
       elf_k1om


    Bei mir müsste es also -melf_i386 heissen. Hab ich irgendwo in nem Forum gefunden. http://ubuntuforums.org/showthread.php?t=1071816


    Ich vermute mal, daß ich das mit


    CXXFLAGS = -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -Xlinker -melf_i386


    angeben müsste, oder?
    Bringt aber auch nichts:

    Code
    g++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -m32 -Xlinker -melf_i386 -rdynamic  audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o timers.o tools.o transfer.o vdr.o videodir.o -ljpeg -lpthread -ldl -lcap -lrt -lfreetype -lfontconfig    ./libsi/libsi.a -o vdr
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: cannot find -lcap
    collect2: error: ld returned 1 exit status


    Trotzdem Dank an alle, die versucht haben, zu helfen.
    Ich werde dann wohl doch eine virtuelle 32-bit-Machine aufsetzen, wie von Gerald vorgeschlagen.


    Klaus


  • Hab's versuchsweise auch mal installiert, macht aber keinen Unterschied.


    Unter Suse 11.2 (älter als Deine Installation) läßt sich der VDR nicht 32bittig bauen:

    Code
    vdr:/usr/src/vdr-1.7.31-work # make -j4
    g++ -m32 -g -O3 -Wall -Woverloaded-virtual -Wno-parentheses -rdynamic  audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbci.o dvbplayer.o dvbspu.o dvbsubtitle.o eit.o eitscan.o epg.o filter.o font.o i18n.o interface.o keys.o lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o shutdown.o skinclassic.o skinlcars.o skins.o skinsttng.o sourceparams.o sources.o spu.o status.o svdrp.o themes.o thread.o timers.o tools.o transfer.o vdr.o videodir.o -ljpeg -lpthread -ldl -lcap -lrt -lfreetype -lfontconfig    ./libsi/libsi.a -o vdr
    /usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/gcc/x86_64-suse-linux/4.4/../../../libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/lib64/libcap.so when searching for -lcap
    /usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/bin/ld: cannot find -lcap
    collect2: ld returned 1 exit status
    make: *** [vdr] Fehler 1


    Es gibt folgende installierte cap-Libraries:


    Wenn ich noch einen Symlink von /lib/libcap.so nach libcap.so.1 anlege,

    Code
    vdr:/usr/src/vdr-1.7.31-work # vdr:/lib # ls -l /lib/libca*
    lrwxrwxrwx 1 root root    11  7. Okt 14:57 /lib/libcap.so -> libcap.so.1
    lrwxrwxrwx 1 root root    14  7. Okt 13:40 /lib/libcap.so.1 -> libcap.so.1.10
    -rwxr-xr-x 1 root root 13948 24. Okt 2009  /lib/libcap.so.1.10
    lrwxrwxrwx 1 root root    14  7. Okt 13:40 /lib/libcap.so.2 -> libcap.so.2.16
    -rwxr-xr-x 1 root root 18076 24. Okt 2009  /lib/libcap.so.2.16

    läßt sich der VDR auch 32bittig bauen. Möglicherweise darf der Symlink auch nach libcap.so.2 zeigen.


    Auf libpcap bin ich gekommen, weil ich ein ähnliches Problem beim bauen einer 32bittigen Version von tcpdump hatte.


    Gruß
    e9hack

  • Hi,


    unter openSuSE 12.2 steht die 32bit Version der libcap unter /lib, nicht unter /usr/lib!
    Versuch doch mal, -L/lib zu LDFLAGS dazuzunehmen.


    Eigentlich sollte nach den neuen Filesystemstandards/lib und /usr/lib ohnehin dasselbe sein, aber bei SuSE ist das wohl noch nicht komplett durchgezogen mit dem neuen Standard.


    Ciao.
    Michael.

  • unter openSuSE 12.2 steht die 32bit Version der libcap unter /lib, nicht unter /usr/lib!
    Versuch doch mal, -L/lib zu LDFLAGS dazuzunehmen.


    Siehe hier.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!