Łączenie za pomocą g++ nie powiodło się wyszukiwanie-lstdc++

Próbuję użyć cudzego pliku Makefile, aby uzupełnić bardzo prostą bibliotekę c++. Plik makefile jest następujący:

JNIFLAGS=-O2 -pthread -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux

all:
    rm -f ../dist/libUtils.so
    g++ $(JNIFLAGS) -c -m32 -o com_markets_utils_dates_NativeTime.o com_markets_utils_dates_NativeTime.cpp
    g++ $(JNIFLAGS) -c -m32 -o DateUtil.o DateUtil.cpp
    g++ -pthread -m32 -shared -fPIC -o ../dist/libUtils.so DateUtil.cpp
    g++ -pthread -m32 -shared -fPIC -o ../dist/libNativeTime.so DateUtil.o com_markets_utils_dates_NativeTime.o

To dobrze kompiluje, ale linker narzeka:

...
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.1/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.1/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.1/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.1/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status
make: *** [all] Error 1

FYI, jestem na Ubuntu 9.10 64bit.

Author: jwoolard, 2010-01-18

3 answers

Posting for future reference, rozwiązaniem, które znalazłem było Zainstalować g++ - multilib . Miałem ten sam niezgodny problem związany z-lstdc++ na G++ w wersji 4.6.1

W dalszej części: g++ - multilib jest pakietem atrapy, który zainstalował g++4.6-multilib, który z kolei zainstalował odpowiedni libstdc++.więc w folderze /usr/lib/gcc/x86_64-linux-gnu/4.6/32.

 75
Author: Raunaq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-10 14:03:44

Odpowiadam na własne pytanie:

Ths wydaje się być trochę hakerem, musisz utworzyć dowiązanie symboliczne dla 32-bitowej wersji biblioteki (po zainstalowaniu pakietów wymienionych w odpowiedzi @nos):

$ sudo ln -s /usr/lib32/libstdc++.so.6 /usr/lib32/libstdc++.so

Kiedy to zrobisz, linker automatycznie znajdzie odpowiednią bibliotekę do użycia.

 18
Author: jwoolard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-18 13:47:59

Wygląda na to, że kompilujesz 32-bitową bibliotekę na 64-bitowej maszynie, jednak 32-bitowa wersja libstdc++ nie jest obecna.

Spróbuj apt-get install ia32-libs libc6-i386 libc6-dev-i386 lib32gcc1 lib32stdc++6

(btw. tworzysz. więc, powinieneś podać -fPIC podczas kompilacji .pliki cpp również)

 4
Author: nos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-18 12:57:10