【问题标题】:Cross-compiling Freetype 2.5.3 for Android为 Android 交叉编译 Freetype 2.5.3
【发布时间】:2014-09-10 09:08:51
【问题描述】:

我正在尝试交叉编译 Freetype 2.5.3,因此我可以将它与我的 Android NDK Opengl ES 2 项目一起使用,但我不知道该怎么做。我在 Windows 上使用 Cygwin。我已经搜索并阅读了很多关于它的资料,但我仍然需要帮助。

我在 cygwin 中导出了一些标志:

$ export NDK_TOOLCHAIN=/cygdrive/d/Development/Android/ndk-standalone-15
$ export PATH="$NDK_TOOLCHAIN/bin/:$PATH"
$ export HOST=arm-linux-androideabi
$ export CC=$HOST-gcc
$ export CXX=$HOST-g++
$ export AR=$HOST-ar
$ export LD=$HOST-ld
$ export AS=$HOST-as
$ export NM=$HOST-nm
$ export STRIP=$HOST-strip
$ export RANLIB=$HOST-ranlib
$ export OBJDUMP=$HOST-objdump
$ export CPPFLAGS="--sysroot=$NDK_TOOLCHAIN/sysroot -I$NDK_TOOLCHAIN/sysroot/usr/include -I$NDK_TOOLCHAIN/include"
$ export LDFLAGS="-L$NDK_TOOLCHAIN/sysroot/usr/lib -L$NDK_TOOLCHAIN/lib"

然后我尝试交叉编译freetype:

$ ./configure --with-sysroot=/cygdrive/d/Development/Android/ndk-standalone-15/sysroot --host=$HOST --prefix=/ft2tmp --build=$BUILD --without-zlib --with-png=no

但我得到了一个错误:

FreeType 构建系统 -- 自动系统检测

使用以下设置:

平台 unix 编译器
arm-linux-androideabi-gcc 配置目录 ./builds/unix 配置规则./builds/unix/unix.mk

如果这与您的系统或设置不符,请删除 从此目录中的文件“config.mk”然后读取安装文件 寻求帮助。

否则,只需输入make' again to build the library, ormake refdoc'来构建API参考(后者需要python)。

cd 构建/unix; /bin/sh ./配置 '--with-sysroot=/cygdrive/d/Development/Android/ndk-standalone-15/sysroot' '--host=arm-linux-androideabi' '--prefix=/ft2tmp' '--build=' '--without-zlib' '--with-png=no' 检查构建系统类型... x86_64-unknown-cygwin 检查主机系统类型... arm-unknown-linux-androideabi 检查 arm-linux-androideabi-gcc ... arm-linux-androideabi-gcc 检查 C编译器是否工作......没有配置:错误:在 /cygdrive/d/Development/tmp/freetype2/builds/unix': configure: error: C compiler cannot create executables Seeconfig.log' 了解更多详情 builds/unix/detect.mk:86:目标“设置”的配方失败 make:* [设置] 错误 77

部分config.log文件:

gcc 版本 4.8 (GCC) 配置:2925: $? = 0 配置:2914: arm-linux-androideabi-gcc -V >&5 arm-linux-androideabi-gcc.exe:错误: 无法识别的命令行选项“-V”arm-linux-androideabi-gcc.exe: 致命错误:没有输入文件编译终止。配置:2925:$? = 1 配置:2914:arm-linux-androideabi-gcc -qversion >&5 arm-linux-androideabi-gcc.exe:错误:无法识别的命令行选项 '-qversion' arm-linux-androideabi-gcc.exe:致命错误:没有输入文件 编译终止。配置:2925:$? = 1 配置:2945: 检查 C 编译器是否工作 configure:2967: arm-linux-androideabi-gcc --sysroot=/cygdrive/d/Development/Android/ndk-standalone-15//sysroot -I/cygdrive/d/Development/Android/ndk-standalone-15//sysroot/usr/include -I/cygdrive/d/Development/Android/ndk-standalone-15//包括 -L/cygdrive/d/Development/Android/ndk-standalone-15//sysroot/usr/lib -L/cygdrive/d/Development /Android/ndk-standalone-15//lib conftest.c >&5 d:/development/android/ndk-standalone-15/bin/../lib/gcc/arm-linux-androideabi/4.8/../. ./../../arm-linux-androideabi/bin/ld.exe: 错误:无法打开 crtbegin_dynamic.o:没有这样的文件或目录 d:/development/android/ndk-standalone-15/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ ld.exe: 错误:无法打开 crtend_android.o:没有这样的文件或目录 d:/development/android/ndk-standalone-15/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ ld.exe: 错误:找不到-lc d:/development/android/ndk-standalone-15/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ ld.exe: 错误:找不到-ldl collect2.exe:错误:ld返回1退出状态 配置:2971:$? = 1 配置:3009:结果:没有配置:失败

所以我的问题是我应该如何正确地做到这一点?

编辑:

我在 CPPFLAGS 和 LDFLAGS 上使用了 unset,并使用了带有 --with-sysroot 标志的 ./configure,现在一切正常。 下一个问题是当我使用

make

我收到以下错误:

$ make ./builds/unix/libtool --mode=compile arm-linux-androideabi-gcc -pedantic -ansi -I/cygdrive/d/Development/tmp/freetype2/objs -I./builds/unix -I/cygdrive/d/Development/tmp/freetype2/include -c -Wall -g -O2 -DFT_CONFIG_OPTION_SYSTEM_ZLIB - DFT_CONFIG_CONFIG_H="" -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H="" -o /cygdrive/d/Development/tmp/freetype2/objs/ftsystem.lo /cygdrive/d/Development/tmp/freetype2/src/base/ftsystem.c libtool: 编译:arm-linux-androideabi-gcc -pedantic -ansi -I/cygdrive/d/Development/tmp/freetype2/objs -I./builds/unix -I/cygdrive/d/Development/tmp/freetype2/include -c -Wall -g -O2 -DFT_CONFIG_OPTION_SYSTEM_ZLIB "-DFT_CONFIG_CONFIG_H=" -DFT2_BUILD_LIBRARY "-DFT_CONFIG_MODULES_H=" /cygdrive/d/Development/tmp/freetype2/src/base/ftsystem.c -fPIC -DPIC -o /cygdrive/d/Development/tmp/freetype2/objs/.libs/ftsystem.o arm-linux-androideabi-gcc.exe:错误: /cygdrive/d/Development/tmp/freetype2/src/base/ftsystem.c:没有 文件或目录 arm-linux-androideabi-gcc.exe:致命错误:无输入 文件编译终止。 /cygdrive/d/Development/tmp/freetype2/builds/freetype.mk:207:配方 对于目标“/cygdrive/d/Development/tmp/freetype2/objs/ftsystem.lo” 制作失败:* [/cygdrive/d/Development/tmp/freetype2/objs/ftsystem.lo] 错误1

【问题讨论】:

    标签: android android-ndk cross-compiling freetype2


    【解决方案1】:

    NDK for Windows 不依赖于 Cygwin,更糟糕的是:它不识别 /cygdrive/... 路径。尝试使用D:/Development/tmp/freetype2

    【讨论】:

      【解决方案2】:

      您必须设置提供 freetype2 所在位置的 Windows 样式路径。以下是如何在您的 Windows 环境路径中包含您在 Android 中用于开发的库和文件。您需要为freetype2 做同样的事情。

      您可能会发现检查这些参考资料很有用:

      您可能会观察到,大多数可用于开发 Android 应用的最佳 material 都在 Linux 上:

      如果您对 Android 开发非常认真,那么值得考虑将您的开发转移到 Linux 平台。

      您还应该看看OpenGL Getting Started,它提供了一些关于如何在Linux、Windows 和 MacOS 上使用 OpenGL 的教程。采用温和的step by step 方法更有助于成功提高您的 OpenGL 开发技能。

      【讨论】:

      • 抱歉回复晚了!问题确实出在路径上,我成功地在 Linux 上交叉编译了它。感谢您的链接,我自己找到了一些,我也会检查其余的!
      【解决方案3】:

      当涉及到用 C 编写的库的交叉编译时,我们需要 NDK。但是在 Windows 上编译这种类型的库非常困难,有时会卡住。我建议你尝试在 Linux 上编译。肯定会编译的

      【讨论】:

        【解决方案4】:

        首先,准备一个独立的 NDK 工具链。见https://stackoverflow.com/a/24978903/192373。我使用了以下参数:

        bash-3.1$ d:/dev/Android/ndk/build/tools/make-standalone-toolchain.sh --platform=android-14 --toolchain=arm-linux-androideabi-4.8 --system=windows-x86_64 --arch=armv7a
        

        接下来,请确保您有工作 /usr/bin/gcc

        bash-3.1$ ./configure --host=arm-linux-androideabi --prefix=d:/Dev/Android/standalone-toolchain-armv7a-android-17 --without-zlib --with-png=no
        

        最后,我运行make,我看到了

         Directory of d:\dev\freetype-2.5.3\objs\.libs
        
        27/07/2014  10:43         3,462,596 libfreetype.a
        27/07/2014  10:43               960 libfreetype.la
        27/07/2014  10:43               961 libfreetype.lai
        27/07/2014  10:43         2,320,272 libfreetype.so
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多