Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android 编译成功 #20

Open
ag2s20150909 opened this issue Aug 15, 2023 · 3 comments
Open

Android 编译成功 #20

ag2s20150909 opened this issue Aug 15, 2023 · 3 comments

Comments

@ag2s20150909
Copy link

主要修改2处

1:修改glog 里面 使用到的Android没有的<execinfo.h>

"execinfo.h"是glibc里面的,因为android是bionic,而非glibc。

/src/tn/glog/src/tacktrace_generic-inl.h 里面的#include <execinfo.h>注释掉。

backtrace(stack, kStackLength); 替换为 0;

2: 将 CMakeLists.txt 里面的 -fopenmp去掉,否则会导致运行时报错 android library "libomp.so" not found.

修改后的CMakeLists.txt:
cmake_minimum_required(VERSION 3.5)
project(tts)
set(CMAKE_CXX_FLAGS " -O3 -w -std=c++11 ")
set(CMAKE_C_FLAGS " -O3 -w -std=c++11 ")

include_directories(tts PUBLIC ./eigen-3.4.0
                    ./src/tn/header
                    ./include
                    ./src/header)
set(lib_src ./src/tn/glog/src/demangle.cc
            ./src/tn/glog/src/logging.cc
            ./src/tn/glog/src/raw_logging.cc
            ./src/tn/glog/src/symbolize.cc
            ./src/tn/glog/src/utilities.cc
            ./src/tn/glog/src/vlog_is_on.cc
            ./src/tn/glog/src/signalhandler.cc
            ./src/tn/gflags/src/gflags.cc
            ./src/tn/gflags/src/gflags_reporting.cc
            ./src/tn/gflags/src/gflags_completions.cc
            ./src/tn/openfst/src/lib/compat.cc
            ./src/tn/openfst/src/lib/flags.cc
            ./src/tn/openfst/src/lib/fst.cc
            ./src/tn/openfst/src/lib/fst-types.cc
            ./src/tn/openfst/src/lib/mapped-file.cc
            ./src/tn/openfst/src/lib/properties.cc
            ./src/tn/openfst/src/lib/symbol-table.cc
            ./src/tn/openfst/src/lib/symbol-table-ops.cc
            ./src/tn/openfst/src/lib/util.cc
            ./src/tn/openfst/src/lib/weight.cc
            ./src/tn/processor.cc
            ./src/tn/token_parser.cc
            ./src/tn/utf8_string.cc
            ./src/engipa/EnglishText2Id.cpp
            ./src/engipa/InitIPASymbols.cpp
            ./src/engipa/alphabet.cpp
            ./src/engipa/ipa.cpp
            ./src/hz2py/hanzi2phoneid.cpp
            ./src/hz2py/Hanz2Piny.cpp
            ./src/hz2py/pinyinmap.cpp
            ./src/nn_op/nn_conv1d.cpp
            ./src/nn_op/nn_softmax.cpp
            ./src/nn_op/nn_layer_norm.cpp
            ./src/nn_op/nn_relu.cpp
            ./src/nn_op/nn_gelu.cpp
            ./src/nn_op/nn_tanh.cpp
            ./src/nn_op/nn_flip.cpp
            ./src/nn_op/nn_cumsum.cpp
            ./src/nn_op/nn_softplus.cpp
            ./src/nn_op/nn_clamp_min.cpp
            ./src/nn_op/nn_sigmoid.cpp
            ./src/nn_op/nn_conv1d_transposed.cpp
            ./src/nn_op/nn_leaky_relu.cpp
            ./src/platform/tts_file_io.cpp
            ./src/platform/tts_logger.cpp
            ./src/utils/utils.cpp
            ./src/modules/iStft.cpp
            ./src/modules/hann.cpp
            ./src/modules/attention_encoder.cpp
            ./src/modules/multi_head_attention.cpp
            ./src/modules/ffn.cpp
            ./src/modules/ConvFlow.cpp
            ./src/modules/DDSConv.cpp
            ./src/modules/ElementwiseAffine.cpp
            ./src/modules/random_gen.cpp
            ./src/modules/ResidualCouplingLayer.cpp
            ./src/modules/ResBlock1.cpp
            ./src/modules/WN.cpp
            ./src/modules/pqmf.cpp
            ./src/models/TextEncoder.cpp
            ./src/models/StochasticDurationPredictor.cpp
            ./src/models/FixDurationPredictor.cpp
            ./src/models/DurationPredictor_base.cpp
            ./src/models/ResidualCouplingBlock.cpp
            ./src/models/Generator_base.cpp
            ./src/models/Generator_hifigan.cpp
            ./src/models/Generator_MS.cpp
            ./src/models/Generator_Istft.cpp
            ./src/models/Generator_MBB.cpp
            ./src/models/SynthesizerTrn.cpp)



add_library(tts SHARED ${lib_src})

add_library(tts_static STATIC ${lib_src})

add_executable(tts_test ./test/main.cpp ${lib_src} )

可以在 CMakeLists.txt 下新建android-build目录,创建编译脚本,更改一下ndk路径,运行,在libs目录下就得到生成产物。

编译脚本内容:
#!/bin/bash


##设置NDK路径
NDK_PATH=~/ndk/android-ndk-r21e
##CMakeLists.txt所在目录
PROJECT_DIR=$(dirname $(pwd))
BUILD_DIR=$(pwd)
JOBS=$(nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 4)
echo "Using $JOBS jobs for make"


buildAndroid(){

ABI=$1

rm -rf "$ABI"
mkdir -p "$ABI" && cd "$ABI"
rm -rf CMakeCache.txt
rm -rf CMakeFiles

cmake \
-DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_SYSTEM_VERSION=21 \
-DANDROID_STL=c++_shared \
-DANDROID_LD=lld \
-DANDROID_ABI=$ABI \
-DANDROID_NDK=$NDK_PATH \
-DANDROID_PLATFORM=android-21 \
-DANDROID_TOOLCHAIN=clang \
-DBUILD_SHARED_LIBS=1 $PROJECT_DIR
make -j$JOBS

sleep 2
mkdir -p "$BUILD_DIR/libs/$ABI"
mv -f libtts.so $BUILD_DIR/libs/$ABI/libtts.so
mv -f libtts_static.a $BUILD_DIR/libs/$ABI/libtts_static.a
mv -f tts_test $BUILD_DIR/libs/$ABI/tts_test
sleep 2

cd ..


}


for cpu in "arm64-v8a" "armeabi-v7a" "x86" "x86_64"
do
    buildAndroid $cpu
done
@Leroy-X
Copy link

Leroy-X commented Aug 15, 2023

大佬分享,谢谢~

@huakunyang
Copy link
Owner

主要修改2处

1:修改glog 里面 使用到的Android没有的<execinfo.h>

"execinfo.h"是glibc里面的,因为android是bionic,而非glibc。

/src/tn/glog/src/tacktrace_generic-inl.h 里面的#include <execinfo.h>注释掉。

backtrace(stack, kStackLength); 替换为 0;

2: 将 CMakeLists.txt 里面的 -fopenmp去掉,否则会导致运行时报错 android library "libomp.so" not found.

修改后的CMakeLists.txt:
可以在 CMakeLists.txt 下新建android-build目录,创建编译脚本,更改一下ndk路径,运行,在libs目录下就得到生成产物。

编译脚本内容:

非常感谢,我在下次更新的时候,可以把你这个加进去。:-)

@Tiny1213
Copy link

Tiny1213 commented Dec 1, 2023

你好,请问可以分享下Android 编译 demo 吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants