适用于 iOS 的 leptonica 1.69 交叉编译(armv7、armv7s 和 arm64)

Posted

技术标签:

【中文标题】适用于 iOS 的 leptonica 1.69 交叉编译(armv7、armv7s 和 arm64)【英文标题】:leptonica 1.69 crosscompile for iOS (armv7, armv7s and arm64) 【发布时间】:2014-06-12 10:59:08 【问题描述】:

我尝试为 armv7、armv7s 和 arm64 交叉编译 leptonica 1.69。

对于模拟器(i386、x86_64),我使用这些设置并且效果很好:

export ios_BASE_SDK="7.1"
export IOS_DEPLOY_TGT="6.1"
export TOOLCHAIN=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain 
export DEVROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer

export SDKROOT=$DEVROOT/SDKs/iPhoneSimulator$IOS_BASE_SDK.sdk
export CFLAGS="-arch x86_64 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"

export CPP=$TOOLCHAIN/usr/bin/cpp
export CXX=$TOOLCHAIN/usr/bin/c++
export CXXCPP=$TOOLCHAIN/usr/bin/cpp
export CC=$TOOLCHAIN/usr/bin/cc
export LD=$TOOLCHAIN/usr/bin/ld
export AR=$TOOLCHAIN/usr/bin/ar
export AS=$TOOLCHAIN/usr/bin/as
export NM=$TOOLCHAIN/usr/bin/nm
export RANLIB=$TOOLCHAIN/usr/bin/ranlib
export LDFLAGS="-L$SDKROOT/usr/lib/"

export CPPFLAGS="-no-cpp-precomp -I$SDKROOT/usr/include/"
export CXXFLAGS=$CFLAGS

然后调用configure

./configure --enable-shared=no --disable-programs --without-zlib --without-libpng --without-jpeg --without-giflib --without-libtiff --libdir=$PWD/lib/nodebug

现在要为 arm 构建它,我尝试使用以下设置:(将 -arch 添加到 CFLAGS 和 CPPFLAGS,设置 SDK 根目录并添加 --host=x86_64)

export DEVROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
export CFLAGS="-arch armv7 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
export CPPFLAGS="-arch armv7 -no-cpp-precomp -I$SDKROOT/usr/include/"

./configure --host=x86_64 --enable-shared=no --disable-programs --without-zlib --without-libpng --without-jpeg --without-giflib --without-libtiff --libdir=$PWD/lib/nodebug

但不知何故,cpp 不起作用。配置日志显示以下内容:

configure:5841: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp -arch armv7 -no-cpp-precomp -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/include/ conftest.c
clang: error: no input files

任何人有什么想法有什么问题吗?或者知道如何进一步调试?

【问题讨论】:

【参考方案1】:

我的编译器、预处理器等路径似乎有问题。仅使用路径中的默认路径即可。所以删除以下部分解决了我的问题:

export CPP=$TOOLCHAIN/usr/bin/cpp
export CXX=$TOOLCHAIN/usr/bin/c++
export CXXCPP=$TOOLCHAIN/usr/bin/cpp
export CC=$TOOLCHAIN/usr/bin/cc
export LD=$TOOLCHAIN/usr/bin/ld
export AR=$TOOLCHAIN/usr/bin/ar
export AS=$TOOLCHAIN/usr/bin/as
export NM=$TOOLCHAIN/usr/bin/nm
export RANLIB=$TOOLCHAIN/usr/bin/ranlib
export LDFLAGS="-L$SDKROOT/usr/lib/"

【讨论】:

如果您能够为 arm64 构建它,您可以在某处共享二进制文件吗?

以上是关于适用于 iOS 的 leptonica 1.69 交叉编译(armv7、armv7s 和 arm64)的主要内容,如果未能解决你的问题,请参考以下文章

扫描名片 Tesseract 和 Leptonica iOS

在 Windows 10 上安装适用于 C++ 的 tesseract

Leptonica - 应用 otsu 阈值后无法写入图像

Leptonica 与 Xcode 框架冲突

Leptonica在VS2010中的编译及简单使用举例

Ubuntu 16.04 安装 Leptonica 1.75.3