dozingcat / VectorCamera

Android app that applies real-time effects to the camera input
GNU General Public License v3.0
133 stars 18 forks source link

Errors during externalNativeBuildRelease #32

Closed Rudloff closed 5 years ago

Rudloff commented 5 years ago

Hello,

I am trying to build 1.4.1 for F-Droid (https://github.com/dozingcat/VectorCamera/issues/13). I managed to build libvpx from source with your instructions but now gradle assembleRelease fails with these errors:

Execution failed for task ':app:externalNativeBuildRelease'.
> Build command failed.
  Error while executing process /home/vagrant/android-sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/.externalNativeBuild/cmake/release/x86_64 --target vectorcamera}
  [1/9] Building CXX object CMakeFiles/webmenc.dir/src/main/cpp/libvpx/webmenc.cc.o
  [2/9] Building CXX object CMakeFiles/webmenc.dir/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc.o
  [3/9] Building CXX object CMakeFiles/webmenc.dir/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxerutil.cc.o
  FAILED: /home/vagrant/android-ndk/r15c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++  --target=x86_64-none-linux-android --gcc-toolchain=/home/vagrant/android-ndk/r15c/toolchains/x86_64-4.9/prebuilt/linux-x86_64 --sysroot=/home/vagrant/android-ndk/r15c/sysroot   -I../../../../src/main/cpp/libvpx/third_party/libwebm -isystem /home/vagrant/android-ndk/r15c/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/vagrant/android-ndk/r15c/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86_64/include -isystem /home/vagrant/android-ndk/r15c/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem /home/vagrant/android-ndk/r15c/sysroot/usr/include/x86_64-linux-android -D__ANDROID_API__=23 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security  -O3 -O2 -DNDEBUG  -fPIC -MD -MT CMakeFiles/webmenc.dir/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc.o -MF CMakeFiles/webmenc.dir/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc.o.d -o CMakeFiles/webmenc.dir/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc.o -c /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:72:14: error: no type named 'unique_ptr' in namespace 'std'
  typedef std::unique_ptr<PrimaryChromaticity> PrimaryChromaticityPtr;
          ~~~~~^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:72:24: error: expected unqualified-id
  typedef std::unique_ptr<PrimaryChromaticity> PrimaryChromaticityPtr;
                         ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:74:23: error: unknown type name 'PrimaryChromaticityPtr'; did you mean 'PrimaryChromaticity'?
                        PrimaryChromaticityPtr* dst) {
                        ^~~~~~~~~~~~~~~~~~~~~~
                        PrimaryChromaticity
  ../../../../src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.h:357:7: note: 'PrimaryChromaticity' declared here
  class PrimaryChromaticity {
        ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:78:8: error: no member named 'reset' in 'mkvmuxer::PrimaryChromaticity'
    dst->reset(new (std::nothrow) PrimaryChromaticity(src->x(), src->y()));
    ~~~  ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:79:13: error: no member named 'get' in 'mkvmuxer::PrimaryChromaticity'
    if (!dst->get())
         ~~~  ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1062:3: error: unknown type name 'PrimaryChromaticityPtr'; did you mean 'PrimaryChromaticity'?
    PrimaryChromaticityPtr r_ptr(nullptr);
    ^~~~~~~~~~~~~~~~~~~~~~
    PrimaryChromaticity
  ../../../../src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.h:357:7: note: 'PrimaryChromaticity' declared here
  class PrimaryChromaticity {
        ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1062:32: error: unknown type name 'nullptr'
    PrimaryChromaticityPtr r_ptr(nullptr);
                                 ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1062:31: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]
    PrimaryChromaticityPtr r_ptr(nullptr);
                                ^~~~~~~~~
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1062:32: note: add a pair of parentheses to declare a variable
    PrimaryChromaticityPtr r_ptr(nullptr);
                                 ^
                                 (
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1067:3: error: unknown type name 'PrimaryChromaticityPtr'; did you mean 'PrimaryChromaticity'?
    PrimaryChromaticityPtr g_ptr(nullptr);
    ^~~~~~~~~~~~~~~~~~~~~~
    PrimaryChromaticity
  ../../../../src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.h:357:7: note: 'PrimaryChromaticity' declared here
  class PrimaryChromaticity {
        ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1067:32: error: unknown type name 'nullptr'
    PrimaryChromaticityPtr g_ptr(nullptr);
                                 ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1067:31: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]
    PrimaryChromaticityPtr g_ptr(nullptr);
                                ^~~~~~~~~
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1067:32: note: add a pair of parentheses to declare a variable
    PrimaryChromaticityPtr g_ptr(nullptr);
                                 ^
                                 (
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1072:3: error: unknown type name 'PrimaryChromaticityPtr'; did you mean 'PrimaryChromaticity'?
    PrimaryChromaticityPtr b_ptr(nullptr);
    ^~~~~~~~~~~~~~~~~~~~~~
    PrimaryChromaticity
  ../../../../src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.h:357:7: note: 'PrimaryChromaticity' declared here
  class PrimaryChromaticity {
        ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1072:32: error: unknown type name 'nullptr'
    PrimaryChromaticityPtr b_ptr(nullptr);
                                 ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1072:31: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]
    PrimaryChromaticityPtr b_ptr(nullptr);
                                ^~~~~~~~~
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1072:32: note: add a pair of parentheses to declare a variable
    PrimaryChromaticityPtr b_ptr(nullptr);
                                 ^
                                 (
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1077:3: error: unknown type name 'PrimaryChromaticityPtr'; did you mean 'PrimaryChromaticity'?
    PrimaryChromaticityPtr wp_ptr(nullptr);
    ^~~~~~~~~~~~~~~~~~~~~~
    PrimaryChromaticity
  ../../../../src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.h:357:7: note: 'PrimaryChromaticity' declared here
  class PrimaryChromaticity {
        ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1077:33: error: unknown type name 'nullptr'
    PrimaryChromaticityPtr wp_ptr(nullptr);
                                  ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1077:32: warning: parentheses were disambiguated as a function declaration [-Wvexing-parse]
    PrimaryChromaticityPtr wp_ptr(nullptr);
                                 ^~~~~~~~~
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1077:33: note: add a pair of parentheses to declare a variable
    PrimaryChromaticityPtr wp_ptr(nullptr);
                                  ^
                                  (
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1243:8: error: no member named 'unique_ptr' in namespace 'std'
    std::unique_ptr<MasteringMetadata> mm_ptr(new MasteringMetadata());
    ~~~~~^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1243:19: error: 'MasteringMetadata' does not refer to a value
    std::unique_ptr<MasteringMetadata> mm_ptr(new MasteringMetadata());
                    ^
  ../../../../src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.h:383:7: note: declared here
  class MasteringMetadata {
        ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1243:38: error: use of undeclared identifier 'mm_ptr'
    std::unique_ptr<MasteringMetadata> mm_ptr(new MasteringMetadata());
                                       ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1244:8: error: use of undeclared identifier 'mm_ptr'
    if (!mm_ptr.get())
         ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1247:3: error: use of undeclared identifier 'mm_ptr'
    mm_ptr->set_luminance_max(mastering_metadata.luminance_max());
    ^
  /home/vagrant/build/com.dozingcatsoftware.vectorcamera/app/src/main/cpp/libvpx/third_party/libwebm/mkvmuxer/mkvmuxer.cc:1248:3: error: use of undeclared identifier 'mm_ptr'
    mm_ptr->set_luminance_min(mastering_metadata.luminance_min());
    ^
  fatal error: too many errors emitted, stopping now [-ferror-limit=]
  4 warnings and 20 errors generated.
  ninja: build stopped: subcommand failed.

Do you know what could cause this? Did I miss some prebuild step?

dozingcat commented 5 years ago

It looks like the compiler isn't using the C++11 library so it doesn't recognize unique_ptr or nullptr. Might be a similar problem to https://stackoverflow.com/questions/36667374/how-to-enable-c11-for-android-studio. Try changing line 19 of app/build.gradle to cppFlags "-O3 -std=c++11".

Strange that I don't get those errors. It could be that my compiler is defaulting to C++11. If adding the flag doesn't work for you I'll try to reproduce the problem on Linux.

Rudloff commented 5 years ago

-std=c++11 did the trick, thank you! Do you want to include the fix in your repository or should we patch this on our end?

dozingcat commented 5 years ago

I added the fix and tagged a new release at https://github.com/dozingcat/VectorCamera/releases/tag/v1.4.2

Rudloff commented 5 years ago

Perfect, thanks!