Связывание с помощью g++ не удается найти-lstdc++
Я пытаюсь использовать чужой Makefile для дополнения очень простой библиотеки c++. Makefile выглядит следующим образом:
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
это прекрасно компилируется, но компоновщик жалуется:
...
/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, я на Ubuntu 9.10 64bit.
3 ответов
публикация для дальнейшего использования, решение, которое я нашел, было установить g++ - multilib. У меня была такая же несовместимая проблема, связанная с-lstdc++ на G++ версии 4.6.1
на дальнейшее прощупывание: г++-мультилиб-это фиктивный пакет, который установлен G++4.6-мультилиб, которые в свою очередь установлены соответствующие с libstdc++.так в /usr/lib в/ССЗ/x86_64 с-линукс-дистрибутив GNU/4.6/32 папки.
отвечая на мой собственный вопрос:
решение Ths кажется немного взломанным, вам нужно создать символическую ссылку для 32-битной версии библиотеки (после установки пакетов, упомянутых в ответе @nos):
$ sudo ln -s /usr/lib32/libstdc++.so.6 /usr/lib32/libstdc++.so
Как только вы это сделаете, компоновщик автоматически найдет правильную библиотеку для использования.
похоже, вы компилируете 32-битную библиотеку на 64-битной машине, однако 32-битная версия libstdc++ отсутствует.
попробуйте apt-get установить ia32-библиотеки пакетом libc6-i386 с пакетом libc6-dev и-для i386 lib32gcc1 lib32stdc++6
(кстати. ты продюсируешь А. таким образом, вы должны указать-fPIC при компиляции.cpp-файлы, а)