Articles of gcc

Android NDK使用哪种编译器?

我正在为Android应用程序编写基于ARM NEON的代码,而我正在努力解决某些编译器标志无法识别的问题。 我后来意识到这些标志的支持最近才添加,而且我的GCC版本更旧了。 我正在Windows上做整件事,并受到Cygwin提供的版本的限制。 这是我的问题:在我尝试在我的Windows机器上构建GCC 4.6.0并让Cygwin喜欢它之前,它会对我有用还是NDK使用自己版本的GCC,我的升级根本不会影响它? 如果是,是否可以告诉它使用不同的编译器?

如何为Android编译GCC?

有没有办法为Android编译GCC? 基本上,在Android终端模拟器中可以访问GCC编译器,并且能够编译将在C或C ++源文件的android上运行的二进制文件。 我的意图是使用它并最终安装make。

arm64和aarch64之间的差异

我有两个“解锁”设备,一个iPad mini 3和一个Galaxy Edge 6,它们都有一个终端和一组简单的unix命令。 我认为这两款设备都配备了arm64处理器,但是当我运行时 uname -a 在两台设备上我都得到了以下内容: 对于iPad mini 3: xxxxs-iPad:/var/mobile root# uname -a Darwin xxxx-iPad 14.0.0 Darwin Kernel Version 14.0.0: Wed Jun 24 00:50:15 PDT 2015; root:xnu-2784.30.7-30/RELEASE_ARM64_S5L8960X iPad4, **arm64**, J85mAP 对于三星Galaxy s6 Edge: u0_a203@zerolte:/ $ uname -a Linux localhost 3.10.61-4497415 #1 SMP PREEMPT Thu Apr 9 15:06:40 KST 2015 **aarch64** GNU/Linux 如果我没有错,那么J85mAP和GNU […]

GCC在-std = gnu ++ 0x和-std = c ++ 0x之间有什么区别?应该使用哪一个?

在GCC 4.4.3(对于Android)中使用-std=c++0x时,我遇到了麻烦: // using -std=c++0x #include uint64_t value; // error: ‘uint64_t’ does not name a type 但是使用-std=gnu++0x可以: // using -std=gnu++0x #include uint64_t value; // OK 与C ++ 0x不兼容吗?

想要编译本机Android二进制文件我可以在手机终端上运行

我已经尝试了几天来编译一个本机ARM Android二进制文件,它将使用终端应用程序在我的手机上执行。 我想生成与手机上安装的标准Posix二进制文件相同types的二进制文件,如ls,mkdir等。我已经在Mac OS X下载了Android NDK,并且能够无错误地编译简单的ELF二进制文件。 但是,当我将它们转移到手机时,它们总是会出现段错误。 也就是说,在GCC中使用-static编译时会出现段错误。 如果我不使用-static,他们会抱怨没有链接等等。简单地说,它们不起作用。 我的假设是它们没有正确链接到Android标准C库。 即使我将我的二进制文件与NDK提供的libc链接,它们仍然无法正常工作。 我读到Android使用Bionic C库,并试图为它下载源代码,但我不确定如何从它构建一个库(它似乎是所有ARM程序集)。 手机上的Android C库是否与Android NDK提供的库不同? 包含在NDK中的那个不允许我编译我可以通过终端执行的本机二进制文件吗? 非常感谢任何指导! 更新: 我终于在Mac OS X上使用GCC 4.7.0了解它。我下载了Bionic标头,然后使用Android NDK附带的C库编译了一个动态链接的二进制文件。 我能够使用手机的C lib(二进制为33K)获得一个测试应用程序在手机上工作。 我还尝试静态链接NDK的C库,这也有效。 为了使这一切工作,我必须将-nostdlib传递给GCC,然后手动将crtbegin_dynamic.o和crtend_android.o添加到GCC的命令行。 它的工作原理如下: $CC \ $NDK_PATH/usr/lib/crtbegin_dynamic.o \ hello.c -o hello \ $CFLAGS \ $NDK_PATH/usr/lib/crtend_android.o 对于静态二进制文件,请使用“crtbegin_static.o”。 这在crtbegin_dynamic.S / crtbegin_static.S源中进行了解释。 对于这个实验,我只使用普通的’ol GCC 4.7.0和Binutils 2.22。 我还使用newlib编译了GCC,但我实际上并没有将我的ARM二进制文件与newlib链接起来。 我强迫GCC / ld直接链接到随Android NDK提供的libc,或者在动态二进制文件的情况下,链接到手机上的libc。

Bambuser ffmpeg – “arm-linux-androideabi-gcc无法创build可执行文件”。

我知道这可能是一些重复的问题。 但这些线程的答案不帮助我。 我想使用Bambuser的ffmpeg编译android的ffmpeg库。 我下载了客户端版本1.3.7到1.6.0的存档。 来自bambuser。 我遵循REAME给出的指示。 当运行./build.sh我遇到以下错误 arm-linux-androideabi-gcc is unable to create an executable file. C compiler test failed. If you think configure made a mistake, make sure you are using the latest version from SVN. If the latest version fails, report the problem to the ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net. Include […]

如何编译Genymotion的C程序(Android x86)

我正在尝试构build一个简单的HelloWorld应用程序,并在Genymotion上运行它。 我的系统是Ubuntu 14.04 64bit。 我安装了Android SDK(r22.6.2)和NDK(r9d)。 第一次尝试:使用预build的NDK ARM工具链进行构build TOOLCHAIN = $NDK/toolchains/arm-linux-androideabi-4.8 $TOOLCHAIN/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc –sysroot=$PLATFORM hello.c -o hello adb push hello /sdcard/ ./hello 我得到一个错误 /system/bin/sh: ./Hello: not executable: magic 7F45 经过一番研究,我很快意识到Genymotion有x86 arch而不是ARM 第二次尝试:使用x86 Standalone ToolChain进行构build 首先制作x86独立工具链 cd $NDK/build/tools ./make-standalone-toolchain.sh –arch=x86 –platform=android-19 –install-dir=/tmp/android-toolchain –ndk-dir=../../. –system=linux-x86_64 使用工具链build立你好 cd tmp/android-toolchain/bin ./i686-linux-android-gcc -o Hello -c hello.c 在Genymotion上运行Hello adb push hello /data/local/tmp […]

将gcc命令转换为CMake for android ndk

我需要添加可以用gcc编译的ac工程如下 gcc -I/usr/include/epic5.1 -I/usr/include/i386-linux-gnu/epic5.1 -I./smproject/ -o code code.c ./smproject/smlib.so -lepic5.1 我已经将code.c文件内容移动到我的Android NDK .cpp文件(src / main / cpp / native-lib.cpp),并将smproject目录中的所有文件移动到src/main/cpp/smproject/目录 这是我的CMakeList.txt内容 # For more information about using CMake with Android Studio, read the # documentation: https://d.android.com/studio/projects/add-native-code.html # Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.4.1) # Creates and names a […]

用clang而不是gcc构buildandroid? 和铛stl lib而不是gnustl lib?

我试图build立一个Android ndk应用程序使用铿锵而不是海湾合作委员会,知道我已经尝试在Android.mk NDK_TOOLCHAIN_VERSION := clang LOCAL_CLANG :=true LOCAL_LDLIBS := -lc++_static LOCAL_CFLAGS := -std=c++11 并在Application.mk中 APP_PLATFORM := android-9 APP_STL := libc++_static APP_CPPFLAGS := -fexceptions -frtti APP_ABI := armeabi-v7a 但它总是给我链接错误与std库。 任何帮助表示赞赏!

为什么gcc emmiting代码与ARM指令集的2字节边界alignment?

我正在使用GCC(包含在Android NDK中的版本)检查我正在为ARM Android平台编译的C程序的汇编语言输出。 我指定了长度为4个字节的ARM指令集,而不是THUMB,但令人惊讶的是,emmited汇编语言代码将函数alignment到2个字节的边界! 下面是生成的代码显示错误.align指令的示例: .Ltext0: .global __aeabi_dmul .global __aeabi_d2iz .section .text.InitializeFIRFilter,"ax",%progbits .align 2 .global InitializeFIRFilter .type InitializeFIRFilter, %function InitializeFIRFilter: .fnstart 根据这个文件 ,正确的alignment应该是4这是有道理的。 我试图通过使用-falign-functions = 4强制alignment,但它被忽略。 这里是我在Android.mk文件中指定的构build标志 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MODULE := nativeJadeMobile LOCAL_SRC_FILES := nativeJadeMobile.c fftasm.s LOCAL_LDLIBS := -llog LOCAL_CFLAGS += -marm -ffast-math -O2 -march=armv6 -falign-functions=4 -save-temps -S […]