首页 文章

交叉编译Freetype 2.5.3 for Android

提问于
浏览
7

我正在尝试交叉编译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'然后阅读INSTALL文件以获取帮助 . 否则,只需再次输入make'来构建库,或者输入refdoc'来构建API引用(后者需要python) . cd build / unix; / bin / sh ./configure'--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编译器是否正常工作......没有配置:错误:in / cygdrive / d / Development / tmp / freetype2 / builds / unix':configure:错误:C编译器无法创建可执行文件Seeconfig.log'以获取更多详细信息build / unix / detect.mk:86:目标'setup'的配方失败make:* [setup]错误77

一些config.log文件:

gcc版本4.8(GCC)配置:2925:$? = 0 configure:2914:arm-linux-androideabi-gcc -V>&5 arm-linux-androideabi-gcc.exe:错误:无法识别的命令行选项'-V'arm-linux-androideabi-gcc.exe:致命错误:没有输入文件编译终止 . configure:2925:$? = 1 configure:2914:arm-linux-androideabi-gcc -qversion>&5 arm-linux-androideabi-gcc.exe:错误:无法识别的命令行选项'-qversion'arm-linux-androideabi-gcc.exe:致命错误:没有输入文件编译终止 . configure:2925:$? = 1 configure: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 // include -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:/开发/机器人/ NDK-独立-15 / bin中/../ LIB / GCC /臂-Linux的androideabi / 4.8 /../../../../臂-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 / androi d / ndk-standalone-15 / bin /../ lib / gcc / arm-linux-androideabi / 4.8 /../../../../ arm-linux-androideabi / bin / ld.exe:错误:找不到-ldl collect2.exe:错误:ld返回1退出状态configure:2971:$? = 1 configure:3009:result:no configure:failed

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

EDIT:

我在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: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 =”/ 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 /开发/ tmp / freetype2 / objs / ftsystem.lo]错误1

4 回答

  • 0

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

    您可能会发现检查这些引用很有用:

    正如您可能会观察到的,开发Android应用程序的大部分最佳material都在Linux上:

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

    您还应该查看OpenGL Getting Started,它提供了有关如何在Linux,Windows和MacOS上使用OpenGL的几个教程 . 采用温和的step by step方法可以更有效地成功提高您的OpenGL开发技能 .

  • 1

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

  • 3

    首先,准备一个独立的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
    
  • 6

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

相关问题