cross compile errors

920 views
Skip to first unread message

idh...@gmail.com

unread,
Oct 21, 2008, 11:42:42 AM10/21/08
to Protocol Buffers
I'm trying to cross compile for a ppc platform from x86 Linux.
I've used the same procedure as I used to successfully cross
compile other tools (not to say that the procedure is actually right)
but I get some errors. Here's what I tried:

setenv CC /opt/cross_compiler/ppc/gcc-4.1.0-glibc-2.3.6/powerpc-603-
linux-gnu/bin/powerpc-603-linux-gnu-gcc
setenv CXX /opt/cross_compiler/ppc/gcc-4.1.0-glibc-2.3.6/powerpc-603-
linux-gnu/bin/powerpc-603-linux-gnu-g++
setenv PATH "$PATH":/opt/cross_compiler/ppc/gcc-4.1.0-glibc-2.3.6/
powerpc-603-linux-gnu/bin
cd /tmp/pbmpc5200/protobuf-2.0.2rc1/
./configure --target=ppc-603-linux-gnu --host=ppc-603-linux-gnu --
build=i686
make

Here are the errors:
make[2]: Entering directory `/tmp/pbmpc5200/protobuf-2.0.2rc1/src'
./protoc google/protobuf/unittest.proto google/protobuf/
unittest_import.proto google/protobuf/unittest_mset.proto google/
protobuf/unittest_optimize_for.proto google/protobuf/
unittest_embed_optimize_for.proto google/protobuf/
unittest_custom_options.proto google/protobuf/compiler/cpp/
cpp_test_bad_identifiers.proto -I. --cpp_out=.
./protoc: line 105: /tmp/pbmpc5200/protobuf-2.0.2rc1/src/.libs/lt-
protoc: cannot execute binary file
./protoc: line 105: /tmp/pbmpc5200/protobuf-2.0.2rc1/src/.libs/lt-
protoc: Success
make[2]: *** [unittest_proto_middleman] Error 1
make[2]: Leaving directory `/tmp/pbmpc5200/protobuf-2.0.2rc1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/pbmpc5200/protobuf-2.0.2rc1'
make: *** [all] Error 2

The libprotobuf.so that I wanted actually was actually created and
works, but there were
errors reported. Did I configure incorrectly or are these errors just
expected when cross
compiling? I looks like it might be trying to run a cross compiled
binary?

Similarly, when cross compiling to win32 using mingw, I get an error:

make[2]: Entering directory `/tmp/pbmingw/protobuf-2.0.2rc1/src'
/bin/sh ../libtool --tag=CXX --mode=link /opt/cross-tools/bin/i386-
mingw32msvc-g++ -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-
compare -g -O2 -o protoc.exe main.o libprotobuf.la libprotoc.la
/opt/cross-tools/bin/i386-mingw32msvc-g++ -Wall -Wwrite-strings -
Woverloaded-virtual -Wno-sign-compare -g -O2 -o protoc.exe
main.o ./.libs/libprotobuf.a -L/tmp/mingwtmp/gcc-i386-mingw32msvc/
i386-mingw32msvc/libstdc++-v3/src -L/tmp/mingwtmp/gcc-i386-mingw32msvc/
i386-mingw32msvc/libstdc++-v3/src/.libs -L/tmp/mingwtmp/gcc-i386-
mingw32msvc/gcc -L/opt/cross-tools/i386-mingw32msvc/bin -L/opt/cross-
tools/i386-mingw32msvc/lib -L/opt/cross-tools/lib/../i386-mingw32msvc/
lib ./.libs/libprotoc.a /tmp/pbmingw/protobuf-2.0.2rc1/src/.libs/
libprotobuf.a /opt/cross-tools/i386-mingw32msvc/lib/libstdc++.a -lm
./.libs/libprotobuf.a: could not read symbols: Archive has no index;
run ranlib to add one
collect2: ld returned 1 exit status
make[2]: *** [protoc.exe] Error 1
make[2]: Leaving directory `/tmp/pbmingw/protobuf-2.0.2rc1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/pbmingw/protobuf-2.0.2rc1'
make: *** [all] Error 2

Manually running ranlib on the library seems to work. So in both
cases,
the builds gave errors but I was able to get the libraries I needed.


Thanks,

David

Kenton Varda

unread,
Oct 21, 2008, 1:35:39 PM10/21/08
to idh...@gmail.com, Protocol Buffers
For the first case, the problem is that the build is trying to run protoc as part of the build process, and it's trying to use the cross-compiled protoc.  I think you can fix this by editing src/Makefile.am at line 201 to change this:

unittest_proto_middleman: protoc$(EXEEXT) $(protoc_inputs)
  ./$^ -I$(srcdir) --cpp_out=.

to this:

unittest_proto_middleman: $(protoc_inputs)
  protoc $^ -I$(srcdir) --cpp_out=.

In other words, this will use the protoc that you have already installed on your system rather than the one you just built.

I guess we should figure out how to make this automatic.
Reply all
Reply to author
Forward
0 new messages