在Mac上编译V8
你好,请教一下,你在编译v8时,使用的NDK是什么版本?我在Mac上编译,出现了C++兼容的问题,不知道这个和NDK版本有无关系
编译的时候,下载V8源码的时候,里面会同时会自动下载NDK工具,应该是配套的。要用配套下载的NDK,NDK版本差异确实很可能引起编译失败,我们在编译FireFox的spidermonkey时也遇到类似问题,就是NDK版本要和要求的一致。不过,不太清楚你这里具体的问题是怎样的呢?我们当时在Ubuntu系统上编译的,没有在MAC上验证过,按理说步骤应该是差不多。
好像还真不能在mac上进行编译,最后我用ubuntu编译通过了 另外 我想问一下 你这个工程 是不是也只能在linux系统上编译 我在window上使用,会报错的
好像还真不能在mac上进行编译,最后我用ubuntu编译通过了 另外 我想问一下 你这个工程 是不是也只能在linux系统上编译 我在window上使用,会报错的
可以在windows下面运行的啊,之前我们就是在Ubuntu上编译,但是在windows下面构建工程和运行的。具体报错是什么原因呢?是不是Android studio里面插件或者CMake的版本等?可能需要看下具体报错信息,然后针对性分析解决
把编译错误贴上
Build command failed. Error while executing process D:\Android\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build F:\V8Android-master\app.externalNativeBuild\cmake\debug\arm64-v8a --target native-lib} [1/1] Linking CXX shared library ........\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so FAILED: cmd.exe /C "cd . && D:\Android\SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android --gcc-toolchain=D:/Android/SDK/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64 --sysroot=D:/Android/SDK/ndk-bundle/sysroot -fPIC -isystem D:/Android/SDK/ndk-bundle/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -frtti -fexceptions -std=c++11 -Wall -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot D:/Android/SDK/ndk-bundle/platforms/android-21/arch-arm64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LD:/Android/SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/arm64-v8a -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ........\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/util.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/Person.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/Gamer.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/class.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/context.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/convert.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/json.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/throw_ex.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -llog -landroid ../../../../src/main/jniLibs/arm64-v8a/libv8_base.a ../../../../src/main/jniLibs/arm64-v8a/libv8_snapshot.a -latomic -lm "D:/Android/SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a" "D:/Android/SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.a" && cd ." D:/Android/SDK/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld:../../../../src/main/jniLibs/arm64-v8a/libv8_base.a: file format not recognized; treating as linker script D:/Android/SDK/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld:../../../../src/main/jniLibs/arm64-v8a/libv8_base.a:1: syntax error clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed.
把编译错误贴上
Build command failed. Error while executing process D:\Android\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build F:\V8Android-master\app.externalNativeBuild\cmake\debug\arm64-v8a --target native-lib} [1/1] Linking CXX shared library ........\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so FAILED: cmd.exe /C "cd . && D:\Android\SDK\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android --gcc-toolchain=D:/Android/SDK/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64 --sysroot=D:/Android/SDK/ndk-bundle/sysroot -fPIC -isystem D:/Android/SDK/ndk-bundle/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -frtti -fexceptions -std=c++11 -Wall -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot D:/Android/SDK/ndk-bundle/platforms/android-21/arch-arm64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LD:/Android/SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/arm64-v8a -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ........\build\intermediates\cmake\debug\obj\arm64-v8a\libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/util.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/Person.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/Gamer.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/class.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/context.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/convert.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/json.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/v8pp/throw_ex.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o -llog -landroid ../../../../src/main/jniLibs/arm64-v8a/libv8_base.a ../../../../src/main/jniLibs/arm64-v8a/libv8_snapshot.a -latomic -lm "D:/Android/SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_static.a" "D:/Android/SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++abi.a" && cd ." D:/Android/SDK/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld:../../../../src/main/jniLibs/arm64-v8a/libv8_base.a: file format not recognized; treating as linker script D:/Android/SDK/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/aarch64-linux-android/4.9.x/../../../../aarch64-linux-android/bin\ld:../../../../src/main/jniLibs/arm64-v8a/libv8_base.a:1: syntax error clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed.
你的手机是arm64-v8a的CPU吗?你是用的我仓库的静态库(.a)?按理说也应该可以,仓库里面附带的是国外的一个工程师编译好的.a,是v8 6.4版本的。不过应该不影响,你在ubuntu下面构建出来的静态库可以替换之,不过需要注意include的头文件需要保持一致,也就是你用自己构建的静态库,那么需要copy你构建的版本的头文件;如果用我这个仓库里面的静态库,那么头文件也沿用。