La méthode de compilation croisée du code C++ et de localisation des exceptions basée sur CMake sur le serveur x86linux

1. Compiler le fichier binaire de l'architecture arm

1. Téléchargez ndk, puisque notre serveur est basé sur l'environnement linux, nous téléchargeons donc android-ndk-r21e-linux-x86_64.zip, puis décompressez-le dans le répertoire correspondant

Remarque : La version de ndk doit correspondre, si la version est incohérente, une erreur peut être signalée lors de la compilation

2. Android CMake, téléchargez n'importe quelle version directement depuis le site officiel, installez-la, vérifiez si l'installation est réussie, vous pouvez la vérifier par la commande cmake -version, si vous pouvez vérifier la version, cela signifie que l'installation est réussie

3. Écrivez un fichier CMakeList pour compiler du code C/C++, qui peut être configuré pour compiler des bibliothèques dynamiques, des bibliothèques statiques et des fichiers exécutables. Selon les besoins, vous pouvez les configurer normalement.

4. Écrivez un script shell et créez un nouveau script run.sh. Dans le script shell, spécifiez le chemin de l'environnement ndk, l'architecture cible DANDROID_ABI à compiler et la version cible Android DANDROID_NATIVE_API_LEVEL. Le script trouvera automatiquement la CMakeList fichier à l'étape 3 pour compiler. Exécutez le fichier, le code run.sh est le suivant :

mkdir -p build

cd build
rm -rf *

cmake .. \
-DCMAKE_TOOLCHAIN_FILE=/xxxxx/android-ndk-r21e/build/cmake/android.toolchain.cmake \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_NATIVE_API_LEVEL=android-29
make -j4
echo "编译时间:"  $(date +%T)

#DCMAKE_TOOLCHAIN_FILE为自己的ndk路径
#DANDROID_AB 可根据需要去配置不同的ABI,即cpu架构

5. Après avoir écrit le fichier CMakeList, exécutez run.sh pour compiler le fichier exécutable ABI que vous souhaitez

2. Méthode de localisation anormale

Un autre avantage de la compilation croisée dans l'environnement ndk est qu'il peut localiser les exceptions de programme. Lorsqu'une exception ou une erreur de programme se produit dans un fichier binaire compilé par C/C++, il ne demande généralement qu'une adresse mémoire comme 0000000000084b6c, et n'affiche pas clairement l'adresse spécifique. Une ligne de code signale une erreur, ce qui rendra difficile la localisation du problème ; vous pouvez localiser l'emplacement de l'erreur de code spécifique en fonction de addr2line dans la chaîne d'outils ndk. L'exemple est le suivant : 1 est le chemin pour configurer l'addr2line de l'environnement ndk pour vous-même, et 2 est le chemin vers le fichier binaire

Commande : android-ndk-r21e/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-addr2line -f -C -e xxxx/bin/AC_card_agent 0000000000084b6c  

3. Réponses à quelques questions

1. Comment vérifier si votre serveur appartient à l'architecture x86 ou arm64

Peut être visualisé via la commande uname -a

Le serveur X86 est le suivant :

 Le serveur arm est le suivant :

 2. Comment vérifier si le fichier exécutable binaire compilé est x86 ou arm64

Il peut être visualisé via la commande fichier + nom du fichier exécutable. Les exemples sont les suivants :

 3. Pourquoi le fichier exécutable compilé ne peut-il pas s'exécuter ?

Cette situation est généralement causée par l'incohérence entre l'architecture du fichier exécutable et l'architecture de l'environnement d'exploitation. Vous pouvez vérifier si elles sont cohérentes en suivant les deux étapes ci-dessus.

Je suppose que tu aimes

Origine blog.csdn.net/banzhuantuqiang/article/details/131420493
conseillé
Classement