DoumanAsh / mp3lame-sys

Rust wrapper over LAME
GNU Lesser General Public License v3.0
5 stars 1 forks source link

error building for android #1

Open tGrothmannFluffy opened 3 months ago

tGrothmannFluffy commented 3 months ago

Hi there,

I'd love encode audio to mp3 in an android app using the flutter rust bridge. I can build locally fine, but building for android results in:

  configure: error: cannot run C compiled programs.
  If you meant to cross compile, use `--host'.
  See `config.log' for more details
  thread 'main' panicked at /Users/[username]/.cargo/registry/src/index.crates.io-6f17d22bba15001f/autotools-0.2.7/src/lib.rs:790:5:

  command did not execute successfully, got: exit status: 1

  build script failed, must exit now
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
note: If the build failed due to a missing target, you can run this command:
note: 
note:     rustup target install armv7-linux-androideabi

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:cargoBuildDebug'.
> Process 'command 'cargo'' finished with non-zero exit value 101
DoumanAsh commented 3 months ago

Can you please try to use feature target_host

Autotools are not very great for cross compilation so I normally prefer to build with docker image or via cross

Android documentation has information on autotools but I'm not sure how reliable it is https://developer.android.com/ndk/guides/other_build_systems#autoconf

tGrothmannFluffy commented 3 months ago

👍 I'm getting compiler errors now:

    Building armeabi-v7a (armv7-linux-androideabi)
   Compiling mp3lame-sys v0.1.4 (https://github.com/DoumanAsh/mp3lame-sys#50a8b6ec)
error: failed to run custom build command for `mp3lame-sys v0.1.4 (https://github.com/DoumanAsh/mp3lame-sys#50a8b6ec)`

Caused by:
  process didn't exit successfully: `/Users/username/projects/Project/native/target/debug/build/mp3lame-sys-6cd96d85f1ad3d85/build-script-build` (exit status: 101)
  --- stdout
  running: cd "/Users/username/projects/Project/native/target/armv7-linux-androideabi/debug/build/mp3lame-sys-49833ea537096797/out/build" && MAKEFLAGS="-j --jobserver-fds=7,8 --jobserver-auth=7,8" "sh" "-c" "exec \"$0\" \"$@\"" "make" "install" "-j8"
  Making install in mpglib
  /bin/sh ../libtool  --tag=CC   --mode=compile /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H  -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I..    -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT common.lo -MD -MP -MF .deps/common.Tpo -c -o common.lo /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/common.c
  /bin/sh ../libtool  --tag=CC   --mode=compile /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H  -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I..    -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT interface.lo -MD -MP -MF .deps/interface.Tpo -c -o interface.lo /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/interface.c
  /bin/sh ../libtool  --tag=CC   --mode=compile /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H  -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I..    -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT layer1.lo -MD -MP -MF .deps/layer1.Tpo -c -o layer1.lo /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer1.c
  /bin/sh ../libtool  --tag=CC   --mode=compile /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H  -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I..    -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT layer2.lo -MD -MP -MF .deps/layer2.Tpo -c -o layer2.lo /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer2.c
  libtool: compile:  /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I.. -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT common.lo -MD -MP -MF .deps/common.Tpo -c /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/common.c  -fPIC -DPIC -o common.o
  libtool: compile:  /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I.. -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT interface.lo -MD -MP -MF .deps/interface.Tpo -c /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/interface.c  -fPIC -DPIC -o interface.o
  libtool: compile:  /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I.. -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT layer1.lo -MD -MP -MF .deps/layer1.Tpo -c /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer1.c  -fPIC -DPIC -o layer1.o
  libtool: compile:  /Users/username/Library/Android/sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -DHAVE_CONFIG_H -I. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I.. -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/include -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib -I/Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame -I.. -O3 -Wall -pipe -O0 -DANDROID -ffunction-sections -fdata-sections -fPIC -gdwarf-2 -fno-omit-frame-pointer --target=armv7-linux-androideabi --target=armv7a-linux-androideabi21 -fno-common -MT layer2.lo -MD -MP -MF .deps/layer2.Tpo -c /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer2.c  -fPIC -DPIC -o layer2.o

  --- stderr
  make: warning: -jN forced in submake: disabling jobserver mode.
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/interface.c:60:9: error: call to undeclared library function 'memset' with type 'void *(void *, int, unsigned int)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
          memset(mp, 0, sizeof(MPSTR));
          ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/interface.c:60:9: note: include the header <string.h> or explicitly provide a declaration for 'memset'
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer1.c:65:5: error: call to undeclared library function 'memset' with type 'void *(void *, int, unsigned int)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
      memset(si, 0, sizeof(*si));
      ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer1.c:65:5: note: include the header <string.h> or explicitly provide a declaration for 'memset'
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/interface.c:125:5: error: call to undeclared function 'bcopy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
      memcpy(nbuf->pnt, buf, (size_t) size);
      ^
  /Users/v/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame/machine.h:40:27: note: expanded from macro 'memcpy'
  #  define memcpy(d, s, n) bcopy ((s), (d), (n))
                            ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/interface.c:221:9: error: call to undeclared function 'bcopy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
          memcpy(ptr + len, mp->tail->pnt + mp->tail->pos, (size_t) nlen);
          ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/libmp3lame/machine.h:40:27: note: expanded from macro 'memcpy'
  #  define memcpy(d, s, n) bcopy ((s), (d), (n))
                            ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/common.c:361:9: error: call to undeclared function 'bcopy'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
          memcpy(mp->wordpointer, bsbufold + mp->fsizeold - backstep, (size_t) backstep);
          ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/mpg123.h:35:27: note: expanded from macro 'memcpy'
  #  define memcpy(d, s, n) bcopy ((s), (d), (n))
                            ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer2.c:140:5: error: call to undeclared library function 'memset' with type 'void *(void *, int, unsigned int)'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
      memset(si, 0, sizeof(*si));
      ^
  /Users/username/.cargo/git/checkouts/mp3lame-sys-1ad09e823b2eed99/50a8b6e/lame-3.100/mpglib/layer2.c:140:5: note: include the header <string.h> or explicitly provide a declaration for 'memset'
  1 error generated.
  1 error generated.
  3 errors generated.
  1 error generated.
  make[1]: *** [common.lo] Error 1
  make[1]: *** Waiting for unfinished jobs....
  make[1]: *** [layer2.lo] Error 1
  make[1]: *** [layer1.lo] Error 1
  make[1]: *** [interface.lo] Error 1
  make: *** [install-recursive] Error 1
  thread 'main' panicked at /Users/username/.cargo/registry/src/index.crates.io-6f17d22bba15001f/autotools-0.2.7/src/lib.rs:790:5:

  command did not execute successfully, got: exit status: 2
DoumanAsh commented 3 months ago

I think I may need to define STDC_HEADERS to make it work

DoumanAsh commented 3 months ago

@tGrothmannFluffy can you show full build output from clean build? Add verbose option as -vv

DoumanAsh commented 2 months ago

I made patch to try to work around android cross compilation Please try to test with it https://github.com/DoumanAsh/mp3lame-sys/pull/2