dev-libs/Ice explicitly adds -m64 or -m32 depending on the result of `uname -m`, which sucks because we're using x32. This is underneath cpp/config/Make.rules.Linux . x86_64-pc-linux-gnux32-g++ -c -I.. -I../../include -DSLICE_API_EXPORTS -O2 -pipe -march=native -mtune=native -m64 -Wall -pthread -fPIC -DNDEBUG Util.cpp x86_64-pc-linux-gnux32-g++ -c -I.. -I../../include -DSLICE_API_EXPORTS -O2 -pipe -march=native -mtune=native -m64 -Wall -pthread -fPIC -DNDEBUG FileTracker.cpp x86_64-pc-linux-gnux32-g++ -c -I.. -I../../include -DSLICE_API_EXPORTS -O2 -pipe -march=native -mtune=native -m64 -Wall -pthread -fPIC -DNDEBUG MD5.cpp x86_64-pc-linux-gnux32-g++ -c -I.. -I../../include -DSLICE_API_EXPORTS -O2 -pipe -march=native -mtune=native -m64 -Wall -pthread -fPIC -DNDEBUG MD5I.cpp rm -f ../../lib/libSlice.so.3.5.1 x86_64-pc-linux-gnux32-g++ -shared -Wl,-O1 -Wl,--as-needed -Wl,--enable-new-dtags -Wl,-rpath,"/usr"/lib64 -rdynamic -O2 -pipe -march=native -mtune=native -m64 -Wall -pthread -fPIC -DNDEBUG -L../../lib -o ../../lib/libSlice.so.3.5.1 -Wl,-h,libSlice.so.35 Scanner.o ../Slice/Grammar.o Parser.o CPlusPlusUtil.o CsUtil.o JavaUtil.o Preprocessor.o Checksum.o PythonUtil.o DotNetNames.o RubyUtil.o PHPUtil.o Util.o FileTracker.o MD5.o MD5I.o -lIceUtil -lmcpp /usr/lib/gcc/x86_64-pc-linux-gnux32/4.7.3/../../../../x86_64-pc-linux-gnux32/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-linux-gnux32/4.7.3/../../../libmcpp.so when searching for -lmcpp /usr/lib/gcc/x86_64-pc-linux-gnux32/4.7.3/../../../../x86_64-pc-linux-gnux32/bin/ld: skipping incompatible /usr/lib/libmcpp.so when searching for -lmcpp /usr/lib/gcc/x86_64-pc-linux-gnux32/4.7.3/../../../../x86_64-pc-linux-gnux32/bin/ld: cannot find -lmcpp collect2: error: ld returned 1 exit status Makefile:49: recipe for target '../../lib/libSlice.so.3.5.1' failed make[2]: *** [../../lib/libSlice.so.3.5.1] Error 1
actually, this was fixed in 3.6.3 already.