Łą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.
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.
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.
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ż)
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