Great, I'm glad it's working now. Now that you mention it I think there was another bug that js_embed was getting installed to /usr/bin, which doesn't really make sense since that program is just used as part of the build and isn't useful for anything else. I believe that is now fixed, too.
On Thu, Jan 5, 2017 at 7:32 PM, Maxx Becker <[email protected]> wrote: > Thanks so much for your replies! I was able to limp along initially by > copying the x64 js_embed binary from /usr/bin to src/ before > cross-compiling. > make check failed all tests in that case but the tools appear to work! > > I tried both of your suggestions, with success, as described below. Before > doing so, I ran "make uninstall" and "make clean" for both cross-compile > and host build configurations so everything was wiped out, then I re-ran > the configure and build steps for the host arch before attempting to > cross-compile using the same configuration commands noted previously. > > @Feng Xiao, I obtained the protobuf-cpp-3.1.0 files from > https://github.com/google/protobuf/releases and had success. > @Adam Cozzette I checked out your branch, verified the macro change, built > and had success. > > In both cases, "make check" failed all tests because the host machine was > unable to execute the binaries in .lib, as they were built in this case for > the ARM arch. > > -Maxx > > > On Thursday, January 5, 2017 at 3:30:22 PM UTC-8, Adam Cozzette wrote: >> >> I went ahead and merged this to master with pull request 2565 >> <https://github.com/google/protobuf/pull/2565> and so cross compilation >> should now work again. >> >> On Tue, Jan 3, 2017 at 1:29 PM, Adam Cozzette <[email protected]> wrote: >> >>> I updated the Autotools build so that it should now correctly build >>> js_embed in a form that's executable on the build machine. It is not in >>> master yet but it is on my cross-compilation branch here: >>> https://github.com/acozzette/protobuf/tree/cross-compilation Maxx, when >>> you have a chance you could you try building on that branch and let me know >>> if it works? >>> >>> On Tue, Jan 3, 2017 at 11:53 AM, Adam Cozzette <[email protected]> >>> wrote: >>> >>>> I hadn't thought about the cross-compilation use case for this. It >>>> seems to me that there are a few different ways to solve this: >>>> 1. Just check well_known_types_embed.cc into Git and we can update it >>>> manually when necessary. This is probably the easiest solution but is a >>>> little bit messy since it requires us to check in another build artifact. >>>> 2. Fix the Autotools build to do the cross-compilation properly on its >>>> own. For this we would probably want to use the AX_PROG_CXX_FOR_BUILD macro >>>> from here >>>> <https://www.gnu.org/software/autoconf-archive/ax_prog_cxx_for_build.html> >>>> as >>>> a way of finding the right C++ compiler to use for building binaries that >>>> need to run as part of the build. >>>> 3. Rely on Bazel for cross-compilation since it is pretty good at >>>> handling this automatically: https://bazel.b >>>> uild/versions/master/docs/bazel-user-manual.html#configurations >>>> 4. Rewrite js/embed.cc as a Python or Perl or shell script so that it >>>> doesn't require compilation. The problem with this is that it would add >>>> another dependency to the build and might make it less portable (e.g. for >>>> Windows). >>>> >>>> Let me try using the AX_PROG_CXX_FOR_BUILD macro and see if that will >>>> work. >>>> >>>> On Tue, Jan 3, 2017 at 11:12 AM, 'Feng Xiao' via Protocol Buffers < >>>> [email protected]> wrote: >>>> >>>>> +acozzette >>>>> >>>>> The js_embed binary was added very recently. The cross-build support >>>>> for that binary is missing at the moment. As a temporary solution, you can >>>>> use this version of protobuf (which doesn't have the js_embed binary): >>>>> https://github.com/google/protobuf/releases/tag/v3.1.0 >>>>> >>>>> >>>>> On Wed, Dec 28, 2016 at 11:57 PM, Maxx Becker <[email protected]> >>>>> wrote: >>>>> >>>>>> I'm a newbie, but I have successfully built the protocol buffers >>>>>> sources (version 3.1.0) on Ubuntu 14.04 x86_64 and installed, as per >>>>>> https://github.com/google/protobuf/blob/master/src/README.md >>>>>> I am now attempting to cross-compile to an ARM target, using the >>>>>> cross-compiling info from the README above and the following as >>>>>> references: >>>>>> https://groups.google.com/forum/#!topic/protobuf/ZWuTzg-N0E0 >>>>>> After running 'make clean' and re-configuring to use the >>>>>> arm-linux-gnueabihf compilers and the previously installed x64 protoc, I >>>>>> encounter a error that indicates it is attempting to use the js_embed >>>>>> binary built for ARM in the process. >>>>>> Relevant info as follows: >>>>>> >>>>>> $ which protoc js_embed >>>>>> /usr/bin/protoc >>>>>> /usr/bin/js_embed >>>>>> >>>>>> $ file /usr/bin/protoc /usr/bin/js_embed >>>>>> /usr/bin/protoc: ELF 64-bit LSB executable, x86-64, version 1 >>>>>> (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, >>>>>> BuildID[sha1]=637edeade5ad13f462551a45ae1285e55a2a1f3c, not stripped >>>>>> /usr/bin/js_embed: ELF 64-bit LSB executable, x86-64, version 1 >>>>>> (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, >>>>>> BuildID[sha1]=e49255de4711facf660f838ad7bad9b01525cf12, not stripped >>>>>> >>>>>> $ arm-linux-gnueabihf-gcc --version >>>>>> arm-linux-gnueabihf-gcc (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.1) 4.8.4 >>>>>> $ arm-linux-gnueabihf-g++ --version >>>>>> arm-linux-gnueabihf-g++ (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.1) 4.8.4 >>>>>> >>>>>> $ g++ --version >>>>>> g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 >>>>>> $ gcc --version >>>>>> gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 >>>>>> >>>>>> $ make clean >>>>>> $ ./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc >>>>>> CXX=arm-linux-gnueabihf-g++ --with-protoc=/usr/bin/protoc >>>>>> --prefix=/programs/protobuf >>>>>> (Can post output if desired) >>>>>> >>>>>> $ make >>>>>> make all-recursive >>>>>> make[1]: Entering directory `/storage/tools/protobuf' >>>>>> Making all in . >>>>>> make[2]: Entering directory `/storage/tools/protobuf' >>>>>> make[2]: Leaving directory `/storage/tools/protobuf' >>>>>> Making all in src >>>>>> make[2]: Entering directory `/storage/tools/protobuf/src' >>>>>> /usr/bin/protoc -I. --cpp_out=. google/protobuf/any_test.proto >>>>>> google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto >>>>>> google/protobuf/map_lite_unittest.proto >>>>>> google/protobuf/map_proto2_unittest.proto >>>>>> google/protobuf/map_unittest.proto google/protobuf/unittest_arena.proto >>>>>> google/protobuf/unittest_custom_options.proto >>>>>> google/protobuf/unittest_drop_unknown_fields.proto >>>>>> google/protobuf/unittest_embed_optimize_for.proto >>>>>> google/protobuf/unittest_empty.proto >>>>>> google/protobuf/unittest_enormous_descriptor.proto >>>>>> google/protobuf/unittest_import_lite.proto >>>>>> google/protobuf/unittest_import.proto >>>>>> google/protobuf/unittest_import_public_lite.proto >>>>>> google/protobuf/unittest_import_public.proto >>>>>> google/protobuf/unittest_lite_imports_nonlite.proto >>>>>> google/protobuf/unittest_lite.proto google/protobuf/unittest_mset.proto >>>>>> google/protobuf/unittest_mset_wire_format.proto >>>>>> google/protobuf/unittest_no_arena_lite.proto >>>>>> google/protobuf/unittest_no_arena_import.proto >>>>>> google/protobuf/unittest_no_arena.proto >>>>>> google/protobuf/unittest_no_field_presence.proto >>>>>> google/protobuf/unittest_no_generic_services.proto >>>>>> google/protobuf/unittest_optimize_for.proto >>>>>> google/protobuf/unittest_preserve_unknown_enum2.proto >>>>>> google/protobuf/unittest_preserve_unknown_enum.proto >>>>>> google/protobuf/unittest.proto >>>>>> google/protobuf/unittest_proto3_arena.proto >>>>>> google/protobuf/unittest_proto3_arena_lite.proto >>>>>> google/protobuf/unittest_proto3_lite.proto >>>>>> google/protobuf/unittest_well_known_types.proto >>>>>> google/protobuf/util/internal/testdata/anys.proto >>>>>> google/protobuf/util/internal/testdata/books.proto >>>>>> google/protobuf/util/internal/testdata/default_value.proto >>>>>> google/protobuf/util/internal/testdata/default_value_test.proto >>>>>> google/protobuf/util/internal/testdata/field_mask.proto >>>>>> google/protobuf/util/internal/testdata/maps.proto >>>>>> google/protobuf/util/internal/testdata/oneofs.proto >>>>>> google/protobuf/util/internal/testdata/proto3.proto >>>>>> google/protobuf/util/internal/testdata/struct.proto >>>>>> google/protobuf/util/internal/testdata/timestamp_duration.proto >>>>>> google/protobuf/util/internal/testdata/wrappers.proto >>>>>> google/protobuf/util/json_format_proto3.proto >>>>>> google/protobuf/util/message_differencer_unittest.proto >>>>>> google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto >>>>>> touch unittest_proto_middleman >>>>>> depbase=`echo google/protobuf/compiler/js/embed.o | sed >>>>>> 's|[^/]*$|.deps/&|;s|\.o$||'`;\ >>>>>> arm-linux-gnueabihf-g++ -std=c++11 -DHAVE_CONFIG_H -I. -I.. >>>>>> -pthread -DHAVE_PTHREAD=1 -Wall -Wno-sign-compare -O2 -g -DNDEBUG -MT >>>>>> google/protobuf/compiler/js/embed.o -MD -MP -MF $depbase.Tpo -c -o >>>>>> google/protobuf/compiler/js/embed.o google/protobuf/compiler/js/embed.cc >>>>>> &&\ >>>>>> mv -f $depbase.Tpo $depbase.Po >>>>>> /bin/bash ../libtool --tag=CXX --mode=link arm-linux-gnueabihf-g++ >>>>>> -std=c++11 -pthread -DHAVE_PTHREAD=1 -Wall -Wno-sign-compare -O2 -g >>>>>> -DNDEBUG -pthread -o js_embed google/protobuf/compiler/js/embed.o >>>>>> libtool: link: arm-linux-gnueabihf-g++ -std=c++11 -pthread >>>>>> -DHAVE_PTHREAD=1 -Wall -Wno-sign-compare -O2 -g -DNDEBUG -pthread -o >>>>>> js_embed google/protobuf/compiler/js/embed.o -pthread >>>>>> oldpwd=`pwd` && cd . && \ >>>>>> $oldpwd/js_embed google/protobuf/compiler/js/well_known_types/any.js >>>>>> google/protobuf/compiler/js/well_known_types/struct.js >>>>>> google/protobuf/compiler/js/well_known_types/timestamp.js > >>>>>> $oldpwd/google/protobuf/compiler/js/well_known_types_embed.cc >>>>>> */bin/bash: line 1: /tools/protobuf/src/js_embed: cannot execute >>>>>> binary file: Exec format error* >>>>>> make[2]: *** [google/protobuf/compiler/js/well_known_types_embed.cc] >>>>>> Error 126 >>>>>> make[2]: Leaving directory `/storage/tools/protobuf/src' >>>>>> make[1]: *** [all-recursive] Error 1 >>>>>> make[1]: Leaving directory `/storage/tools/protobuf' >>>>>> make: *** [all] Error 2 >>>>>> >>>>>> $ file src/js_embed >>>>>> src/js_embed: ELF 32-bit LSB executable, ARM, EABI5 version 1 >>>>>> (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, >>>>>> BuildID[sha1]=74fb68528ae9db46637e1570eeda640ae9f318f1, not stripped >>>>>> >>>>>> It's unclear how I can direct the compilation process to use the >>>>>> js_embed binary in /usr/bin, instead of the js_embed binary it builds for >>>>>> ARM. Any help or direction is appreciated. Thanks! >>>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Protocol Buffers" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to [email protected]. >>>>>> To post to this group, send email to [email protected]. >>>>>> Visit this group at https://groups.google.com/group/protobuf. >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Protocol Buffers" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at https://groups.google.com/group/protobuf. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> >>> >> -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/protobuf. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
