Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linking using g++ fails searching for -lstdc++

I'm trying to use someone else's Makefile to complile a very simple c++ library. The makefile is as follows:

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 

This compiles fine, but the linker complains:

... /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, I am on Ubuntu 9.10 64bit.

like image 298
jwoolard Avatar asked Jan 18 '10 12:01

jwoolard


2 Answers

Posting for future reference, a solution I found was to install g++-multilib. I had the same incompatible problem relating to -lstdc++ on g++ version 4.6.1

On further probing: g++-multilib is a dummy package which installed g++4.6-multilib which in turn installed the appropriate libstdc++.so under the /usr/lib/gcc/x86_64-linux-gnu/4.6/32 folder.

like image 93
Raunaq Avatar answered Sep 18 '22 09:09

Raunaq


Answering my own question:

Ths solution seems to be a bit of a hack, you need to create a symlink for the 32 bit version of the library (after installing the packages mentioned in @nos's answer):

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

Once you've done this, the linker will automagically find the correct library to use.

like image 32
jwoolard Avatar answered Sep 19 '22 09:09

jwoolard