Building for iOS arm-64 produces x86_64 library

452 views
Skip to first unread message

Maria Vilensky

unread,
Jun 18, 2023, 8:07:33 AM6/18/23
to tesseract-ocr
Hi,

I'm trying to build tessract-ocr (latest version) on Mac Ventura for arch arm-64 to link in ios project.

I'm using this script:

export DEVROOT=/Applications/Xcode.app/Contents/Developer
export SDKROOT="$DEVROOT/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.2.sdk"
export CFLAGS="-I$SDKROOT/usr/include/ -I/desktop/projects/tesseract/include/ -arch arm64 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=10.0 -O2 -fembed-bitcode"
export CPPFLAGS=$CFLAGS
export CXXFLAGS="-I/desktop/projects/tesseract/arm-apple-darwin64/ -arch arm64 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=10.0 -O2 -Wno-deprecated-register"
export LDFLAGS="-L$SDKROOT/usr/lib/"
export LIBS="-lz -lpng -ljpeg -ltiff"
export LD="$DEVROOT/usr/bin/ld"
export CC="$DEVROOT/usr/bin/gcc --target=arm-apple-darwin64"
export CXX="$DEVROOT/usr/bin/g++ --target=arm-apple-darwin64"
#export CXX="$DEVROOT/usr/bin/clang++ --target=arm-apple-darwin64
export LEPTONICA_LIBS="-llept"
export AR="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar"
export RANLIB="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib"

sudo ../configure --host=arm-apple-darwin64 --enable-static=yes --enable-shared=no --disable-graphics --disable-legacy --without-cur
# sudo ../configure --target=arm-apple-darwin64 --enable-static=yes --enable-shared=no --disable-graphics --disable-legacy --without-curl

The configuration and make are successful, however, when I run
lipo ./.libs/libtesseract.a -info
on the produced file I get:
Non-fat file: ./.libs/libtesseract.a is architecture: x86_64

And linking the library in xcode produces build error:

Ignoring file ./libtesseract.a, building for iOS-arm64 but attempting to link with file built for macOS-x86_64

Undefined symbol: tesseract::TessBaseAPI::GetUTF8Text()

Undefined symbol: tesseract::TessBaseAPI::SetVariable(char const*, char const*)

Undefined symbol: tesseract::TessBaseAPI::SetPageSegMode(tesseract::PageSegMode)

Undefined symbol: tesseract::TessBaseAPI::Init(char const*, char const*, tesseract::OcrEngineMode, char**, int, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>> const*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>> const*, bool)Undefined symbol: tesseract::TessBaseAPI::Version()

Undefined symbol: tesseract::TessBaseAPI::SetImage(unsigned char const*, int, int, int, int)

Undefined symbol: tesseract::TessBaseAPI::TessBaseAPI()


Here is the output of configure:

configure: WARNING: unrecognized options: --without-cur
checking for arm-apple-darwin64-g++... no
checking for arm-apple-darwin64-clang++... no
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ../config/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports the include directive... yes (GNU style)
checking whether make supports nested variables... yes
checking dependency style of g++... gcc3
checking for a sed that does not truncate output... /usr/bin/sed
checking Major version... 5
checking Minor version... 3
checking Point version... 1-22-g24da4
checking whether make supports nested variables... (cached) yes
checking build system type... x86_64-apple-darwin22.5.0
checking host system type... arm-apple-darwin64
checking whether C++ compiler accepts -Werror=unused-command-line-argument... yes
checking whether C++ compiler accepts -mfpu=neon... no
checking for feenableexcept... no
checking whether C++ compiler accepts -fopenmp-simd... yes
checking --enable-float32 argument...
checking --enable-graphics argument... no
checking --enable-legacy argument... no
checking for g++ option to support OpenMP... unsupported
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking tiffio.h usability... no
checking tiffio.h presence... no
checking for tiffio.h... no
checking --enable-opencl argument...
checking tensorflow/core/framework/graph.pb.h usability... no
checking tensorflow/core/framework/graph.pb.h presence... no
checking for tensorflow/core/framework/graph.pb.h... no
checking if -framework Accelerate works... yes
checking if -framework OpenCL works... yes
checking --enable-visibility argument...
checking whether to use tessdata-prefix... yes
checking if compiling with clang... yes
checking whether to enable debugging...
checking how to print strings... printf
checking for arm-apple-darwin64-gcc... no
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no
checking for BSD- or MS-compatible name lister (nm)... no
checking for arm-apple-darwin64-dumpbin... no
checking for arm-apple-darwin64-link... no
checking for dumpbin... no
checking for link... link -dump
checking the name lister (nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 786432
checking how to convert x86_64-apple-darwin22.5.0 file names to arm-apple-darwin64 format... func_convert_file_noop
checking how to convert x86_64-apple-darwin22.5.0 file names to toolchain format... func_convert_file_noop
checking for /Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld option to reload object files... -r
checking for arm-apple-darwin64-objdump... no
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for arm-apple-darwin64-dlltool... no
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for arm-apple-darwin64-ar... no
checking for ar... ar
checking for archiver @FILE support... no
checking for arm-apple-darwin64-strip... no
checking for strip... strip
checking for arm-apple-darwin64-ranlib... no
checking for ranlib... ranlib
checking command to parse nm output from gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for arm-apple-darwin64-mt... no
checking for mt... no
checking if : is a manifest tool... no
checking for arm-apple-darwin64-dsymutil... no
checking for dsymutil... dsymutil
checking for arm-apple-darwin64-nmedit... no
checking for nmedit... nmedit
checking for arm-apple-darwin64-lipo... no
checking for lipo... lipo
checking for arm-apple-darwin64-otool... no
checking for otool... otool
checking for arm-apple-darwin64-otool64... no
checking for otool64... no
checking for -single_module linker flag... yes
checking for -exported_symbols_list linker flag... yes
checking for -force_load linker flag... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... yes
checking for gcc option to produce PIC... -fno-common -DPIC
checking if gcc PIC flag -fno-common -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin64 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no
checking whether the g++ linker (/Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking for g++ option to produce PIC... -fno-common -DPIC
checking if g++ PIC flag -fno-common -DPIC works... yes
checking if g++ static flag -static works... no
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/Users/Tnova/Downloads/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin64 dyld
checking how to hardcode library paths into programs... immediate
checking whether C++ compiler accepts -std=c++17... yes
checking whether C++ compiler accepts -std=c++20... yes
checking for library containing pthread_create... none required
checking for brew... true
checking for asciidoc... false
checking for xsltproc... true
checking for wchar_t... yes
checking for long long int... yes
checking for arm-apple-darwin64-pkg-config... no
checking for pkg-config... /usr/local/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for libcurl... yes
checking for lept >= 1.74... yes
checking for libarchive... yes
checking for icu-uc >= 52.1... yes
checking for icu-i18n >= 52.1... yes
checking for pango >= 1.38.0... no
configure: WARNING: pango 1.38.0 or higher is required, but was not found.
configure: WARNING: Training tools WILL NOT be built.
configure: WARNING: Try to install libpango1.0-dev package.
checking for cairo... no
configure: WARNING: Training tools WILL NOT be built because of missing cairo library.
configure: WARNING: Try to install libcairo-dev?? package.
checking for pangocairo... no
checking for pangoft2... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating include/tesseract/version.h
config.status: creating Makefile
config.status: creating tesseract.pc
config.status: creating tessdata/Makefile
config.status: creating tessdata/configs/Makefile
config.status: creating tessdata/tessconfigs/Makefile
config.status: creating java/Makefile
config.status: creating java/com/Makefile
config.status: creating java/com/google/Makefile
config.status: creating java/com/google/scrollview/Makefile
config.status: creating java/com/google/scrollview/events/Makefile
config.status: creating java/com/google/scrollview/ui/Makefile
config.status: creating include/config_auto.h
config.status: executing depfiles commands
config.status: executing libtool commands
configure: WARNING: unrecognized options: --without-cur

Configuration is done.
You can now build and install tesseract by running:

$ make
$ sudo make install
$ sudo ldconfig

Zdenko Podobny

unread,
Jun 18, 2023, 10:02:10 AM6/18/23
to tesser...@googlegroups.com
Hello,

I am not Mac user, but the following output indicates that autotools are not able to use g++ for arm-64:

checking for arm-apple-darwin64-g++... no
checking for arm-apple-darwin64-clang++... no

Also, you try to force linking LIBS="-lz -lpng -ljpeg -ltiff", but configure claims tiffio.h (tiff header file) is not present:
checking tiffio.h usability... no
checking tiffio.h presence... no
checking for tiffio.h... no
It does not make sense to me...

Also
checking for arm-apple-darwin64-pkg-config... no
checking for pkg-config... /usr/local/bin/pkg-config
IMO you should use pkg-config within $DEVROOT/ tree, right?

There is a lot of "checking for arm-apple-darwin64-xyz... no". You need to fix this first. As this is not tesseract specific, try to use some Max arm forum for solving it.

Zdenko


ne 18. 6. 2023 o 14:07 Maria Vilensky <tigr...@gmail.com> napísal(a):
--
You received this message because you are subscribed to the Google Groups "tesseract-ocr" group.
To unsubscribe from this group and stop receiving emails from it, send an email to tesseract-oc...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/tesseract-ocr/dcdf433a-1332-405e-b97d-b5a2e42ad6d1n%40googlegroups.com.

Maria Vilensky

unread,
Jun 20, 2023, 2:39:28 AM6/20/23
to tesseract-ocr
Thanks for your reply, after many more googling and build attempts, I am not even sure if this is supposed to work - compling arm64 library on an Intel-based mac? Can anyone who tried this confirm this or give a suggestion how to deal with it?
Thanks! 

Maria Vilensky

unread,
Jun 20, 2023, 9:16:15 AM6/20/23
to tesseract-ocr
We now tried the same script on M1 based machine, and the error is as follows:

CXXLD tesseract
Undefined symbols for architecture arm64:
"tesseract::IntSimdMatrix::intSimdMatrixNEON", referenced from:
tesseract::SIMDDetect::SIMDDetect() in libtesseract.a(libtesseract_la-simddetect.o)
tesseract::SIMDDetect::Update() in libtesseract.a(libtesseract_la-simddetect.o)
"tesseract::DotProductNEON(float const*, float const*, int)", referenced from:
tesseract::SIMDDetect::SIMDDetect() in libtesseract.a(libtesseract_la-simddetect.o)
tesseract::SIMDDetect::Update() in libtesseract.a(libtesseract_la-simddetect.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Zdenko Podobny

unread,
Jun 20, 2023, 2:47:46 PM6/20/23
to tesser...@googlegroups.com
Please do not post only the last error - usually, there is a problem before and e,g, configure output could indicate a lot of...

ut 20. 6. 2023 o 15:16 Maria Vilensky <tigr...@gmail.com> napísal(a):

Maria Vilensky

unread,
Jun 22, 2023, 12:19:32 PM6/22/23
to tesseract-ocr
@zdenop 

I've checked all the related posts in the group and it git but no luck with solutions...
I'm now running this on M2 machine, this is the script (I want to get arm64 library for iOS, so I understand "host" is required and not only target)

export SDKROOT="$DEVROOT/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk"
export CFLAGS="-arch arm64 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=10.0 -O2 -fembed-bitcode"
sudo ../configure --target=arm-apple-darwin64 --host=arm-apple-darwin64 --enable-static=yes --enable-shared=no --disable-graphics --disable-legacy --without-curl

This is the configure output:

checking for arm-apple-darwin64-g++... no
checking for arm-apple-darwin64-clang++... no
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C++... yes

checking whether g++ accepts -g... yes
checking for g++ option to enable C++11 features... none needed

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... ../config/install-sh -c -d

checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports the include directive... yes (GNU style)
checking whether make supports nested variables... yes
checking dependency style of g++... gcc3
checking for a sed that does not truncate output... /usr/bin/sed
checking Major version... 5
checking Minor version... 3
checking Point version... 1-22-g24da4
checking whether make supports nested variables... (cached) yes
checking build system type... aarch64-apple-darwin22.3.0

checking host system type... arm-apple-darwin64
checking whether C++ compiler accepts -Werror=unused-command-line-argument... yes
checking whether C++ compiler accepts -mfpu=neon... no
checking for feenableexcept... no
checking whether C++ compiler accepts -fopenmp-simd... yes
checking --enable-float32 argument...
checking --enable-graphics argument... no
checking --enable-legacy argument... no
checking for g++ option to support OpenMP... unsupported
checking for stdio.h... yes

checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes

checking for tiffio.h... no
checking --enable-opencl argument...
checking for tensorflow/core/framework/graph.pb.h... no
checking if -framework Accelerate works... yes
checking if -framework OpenCL works... yes
checking --enable-visibility argument...
checking whether to use tessdata-prefix... yes
checking if compiling with clang... yes
checking whether to enable debugging...
checking how to print strings... printf
checking for arm-apple-darwin64-gcc... no
checking for gcc... gcc
checking whether the compiler supports GNU C... yes

checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed

checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no

checking for BSD- or MS-compatible name lister (nm)... no
checking for arm-apple-darwin64-dumpbin... no
checking for arm-apple-darwin64-link... no
checking for dumpbin... no
checking for link... link -dump
checking the name lister (nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 786432
checking how to convert aarch64-apple-darwin22.3.0 file names to arm-apple-darwin64 format... func_convert_file_noop
checking how to convert aarch64-apple-darwin22.3.0 file names to toolchain format... func_convert_file_noop
checking for /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld option to reload object files... -r
checking for arm-apple-darwin64-file... no
checking for file... file
checking whether the gcc linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes

checking dynamic linker characteristics... darwin64 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no
checking whether the g++ linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes

checking for g++ option to produce PIC... -fno-common -DPIC
checking if g++ PIC flag -fno-common -DPIC works... yes
checking if g++ static flag -static works... no
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes

checking dynamic linker characteristics... darwin64 dyld
checking how to hardcode library paths into programs... immediate
checking whether C++ compiler accepts -std=c++17... yes
checking whether C++ compiler accepts -std=c++20... yes
checking for library containing pthread_create... none required
checking for brew... true
checking for asciidoc... false
checking for xsltproc... true
checking for wchar_t... yes
checking for long long int... yes
checking for arm-apple-darwin64-pkg-config... no
checking for pkg-config... /opt/homebrew/bin/pkg-config

checking pkg-config is at least version 0.9.0... yes
checking for lept >= 1.74... yes
checking for libarchive... no
checking for icu-uc >= 52.1... no
checking for icu-i18n >= 52.1... no
configure: WARNING: icu 52.1 or higher is required, but was not found.

configure: WARNING: Training tools WILL NOT be built.
configure: WARNING: Try to install libicu-dev package.
Configuration is done.
You can now build and install tesseract by running:

$ make
$ sudo make install
$ sudo ldconfig


This is the make output:

sudo make -sj8                  
Making all in .
  CXX      src/tesseract-tesseract.o
  CXX      src/api/libtesseract_la-baseapi.lo
  CXX      src/api/libtesseract_la-altorenderer.lo
  CXX      src/api/libtesseract_la-capi.lo
  CXX      src/api/libtesseract_la-lstmboxrenderer.lo
  CXX      src/api/libtesseract_la-hocrrenderer.lo
  CXX      src/api/libtesseract_la-pdfrenderer.lo
  CXX      src/api/libtesseract_la-renderer.lo
  CXX      src/api/libtesseract_la-wordstrboxrenderer.lo
  CXX      src/arch/libtesseract_la-intsimdmatrix.lo
  CXX      src/arch/libtesseract_la-simddetect.lo
  CXX      src/ccmain/libtesseract_la-applybox.lo
  CXX      src/ccmain/libtesseract_la-control.lo
  CXX      src/ccmain/libtesseract_la-linerec.lo
  CXX      src/ccmain/libtesseract_la-ltrresultiterator.lo
  CXX      src/ccmain/libtesseract_la-output.lo
  CXX      src/ccmain/libtesseract_la-pageiterator.lo
  CXX      src/ccmain/libtesseract_la-pagesegmain.lo
  CXX      src/ccmain/libtesseract_la-pagewalk.lo
  CXX      src/ccmain/libtesseract_la-paragraphs.lo
  CXX      src/ccmain/libtesseract_la-reject.lo
  CXX      src/ccmain/libtesseract_la-resultiterator.lo
  CXX      src/ccmain/libtesseract_la-tessedit.lo
  CXX      src/ccmain/libtesseract_la-tesseractclass.lo
  CXX      src/ccmain/libtesseract_la-thresholder.lo
  CXX      src/ccmain/libtesseract_la-werdit.lo
  CXX      src/ccstruct/libtesseract_la-blamer.lo
  CXX      src/ccstruct/libtesseract_la-blobbox.lo
  CXX      src/ccstruct/libtesseract_la-blobs.lo
  CXX      src/ccstruct/libtesseract_la-blread.lo
  CXX      src/ccstruct/libtesseract_la-boxread.lo
  CXX      src/ccstruct/libtesseract_la-boxword.lo
  CXX      src/ccstruct/libtesseract_la-ccstruct.lo
  CXX      src/ccstruct/libtesseract_la-coutln.lo
  CXX      src/ccstruct/libtesseract_la-detlinefit.lo
  CXX      src/ccstruct/libtesseract_la-image.lo
  CXX      src/ccstruct/libtesseract_la-imagedata.lo
  CXX      src/ccstruct/libtesseract_la-linlsq.lo
  CXX      src/ccstruct/libtesseract_la-matrix.lo
  CXX      src/ccstruct/libtesseract_la-mod128.lo
  CXX      src/ccstruct/libtesseract_la-normalis.lo
  CXX      src/ccstruct/libtesseract_la-ocrblock.lo
  CXX      src/ccstruct/libtesseract_la-ocrpara.lo
  CXX      src/ccstruct/libtesseract_la-ocrrow.lo
  CXX      src/ccstruct/libtesseract_la-otsuthr.lo
  CXX      src/ccstruct/libtesseract_la-pageres.lo
  CXX      src/ccstruct/libtesseract_la-pdblock.lo
  CXX      src/ccstruct/libtesseract_la-points.lo
  CXX      src/ccstruct/libtesseract_la-polyaprx.lo
  CXX      src/ccstruct/libtesseract_la-polyblk.lo
  CXX      src/ccstruct/libtesseract_la-quadlsq.lo
  CXX      src/ccstruct/libtesseract_la-quspline.lo
  CXX      src/ccstruct/libtesseract_la-ratngs.lo
  CXX      src/ccstruct/libtesseract_la-rect.lo
  CXX      src/ccstruct/libtesseract_la-seam.lo
  CXX      src/ccstruct/libtesseract_la-split.lo
  CXX      src/ccstruct/libtesseract_la-statistc.lo
  CXX      src/ccstruct/libtesseract_la-stepblob.lo
  CXX      src/ccstruct/libtesseract_la-werd.lo
  CXX      src/classify/libtesseract_la-classify.lo
  CXX      src/dict/libtesseract_la-context.lo
  CXX      src/dict/libtesseract_la-dawg.lo
  CXX      src/dict/libtesseract_la-dawg_cache.lo
  CXX      src/dict/libtesseract_la-dict.lo
  CXX      src/dict/libtesseract_la-stopper.lo
  CXX      src/dict/libtesseract_la-trie.lo
  CXX      src/textord/libtesseract_la-alignedblob.lo
  CXX      src/textord/libtesseract_la-baselinedetect.lo
  CXX      src/textord/libtesseract_la-bbgrid.lo
  CXX      src/textord/libtesseract_la-blkocc.lo
  CXX      src/textord/libtesseract_la-blobgrid.lo
  CXX      src/textord/libtesseract_la-ccnontextdetect.lo
  CXX      src/textord/libtesseract_la-cjkpitch.lo
  CXX      src/textord/libtesseract_la-colfind.lo
  CXX      src/textord/libtesseract_la-colpartition.lo
  CXX      src/textord/libtesseract_la-colpartitionset.lo
  CXX      src/textord/libtesseract_la-colpartitiongrid.lo
  CXX      src/textord/libtesseract_la-devanagari_processing.lo
  CXX      src/textord/libtesseract_la-drawtord.lo
  CXX      src/textord/libtesseract_la-edgblob.lo
  CXX      src/textord/libtesseract_la-edgloop.lo
  CXX      src/textord/libtesseract_la-fpchop.lo
  CXX      src/textord/libtesseract_la-gap_map.lo
  CXX      src/textord/libtesseract_la-imagefind.lo
  CXX      src/textord/libtesseract_la-linefind.lo
  CXX      src/textord/libtesseract_la-makerow.lo
  CXX      src/textord/libtesseract_la-oldbasel.lo
  CXX      src/textord/libtesseract_la-pithsync.lo
  CXX      src/textord/libtesseract_la-pitsync1.lo
  CXX      src/textord/libtesseract_la-scanedg.lo
  CXX      src/textord/libtesseract_la-sortflts.lo
  CXX      src/textord/libtesseract_la-strokewidth.lo
  CXX      src/textord/libtesseract_la-tabfind.lo
  CXX      src/textord/libtesseract_la-tablefind.lo
  CXX      src/textord/libtesseract_la-tabvector.lo
  CXX      src/textord/libtesseract_la-tablerecog.lo
  CXX      src/textord/libtesseract_la-textlineprojection.lo
  CXX      src/textord/libtesseract_la-textord.lo
  CXX      src/textord/libtesseract_la-topitch.lo
  CXX      src/textord/libtesseract_la-tordmain.lo
  CXX      src/textord/libtesseract_la-tospace.lo
  CXX      src/textord/libtesseract_la-underlin.lo
  CXX      src/textord/libtesseract_la-wordseg.lo
  CXX      src/textord/libtesseract_la-workingpartset.lo
  CXX      src/wordrec/libtesseract_la-tface.lo
  CXX      src/wordrec/libtesseract_la-wordrec.lo
  CXX      src/ccutil/libtesseract_ccutil_la-ccutil.lo
  CXX      src/ccutil/libtesseract_ccutil_la-clst.lo
  CXX      src/ccutil/libtesseract_ccutil_la-elst2.lo
  CXX      src/ccutil/libtesseract_ccutil_la-elst.lo
  CXX      src/ccutil/libtesseract_ccutil_la-serialis.lo
  CXX      src/ccutil/libtesseract_ccutil_la-scanutils.lo
  CXX      src/ccutil/libtesseract_ccutil_la-tessdatamanager.lo
  CXX      src/ccutil/libtesseract_ccutil_la-tprintf.lo
  CXX      src/ccutil/libtesseract_ccutil_la-unicharcompress.lo
  CXX      src/ccutil/libtesseract_ccutil_la-unicharset.lo
  CXX      src/ccutil/libtesseract_ccutil_la-params.lo
  CXX      src/lstm/libtesseract_lstm_la-convolve.lo
  CXX      src/lstm/libtesseract_lstm_la-fullyconnected.lo
  CXX      src/lstm/libtesseract_lstm_la-functions.lo
  CXX      src/lstm/libtesseract_lstm_la-input.lo
  CXX      src/lstm/libtesseract_lstm_la-lstm.lo
  CXX      src/lstm/libtesseract_lstm_la-lstmrecognizer.lo
  CXX      src/lstm/libtesseract_lstm_la-maxpool.lo
  CXX      src/lstm/libtesseract_lstm_la-network.lo
  CXX      src/lstm/libtesseract_lstm_la-networkio.lo
  CXX      src/lstm/libtesseract_lstm_la-parallel.lo
  CXX      src/lstm/libtesseract_lstm_la-plumbing.lo
  CXX      src/lstm/libtesseract_lstm_la-recodebeam.lo
  CXX      src/lstm/libtesseract_lstm_la-reconfig.lo
  CXX      src/lstm/libtesseract_lstm_la-reversed.lo
  CXX      src/lstm/libtesseract_lstm_la-series.lo
  CXX      src/lstm/libtesseract_lstm_la-weightmatrix.lo
  CXX      src/arch/libtesseract_native_la-dotproduct.lo
  CXXLD    libtesseract_ccutil.la
  CXXLD    libtesseract_native.la

  CXXLD    libtesseract_lstm.la
  CXXLD    libtesseract.la
  CXXLD    tesseract
Undefined symbols for architecture arm64:
  "tesseract::IntSimdMatrix::intSimdMatrixNEON", referenced from:
      tesseract::SIMDDetect::SIMDDetect() in libtesseract.a(libtesseract_la-simddetect.o)
      tesseract::SIMDDetect::Update() in libtesseract.a(libtesseract_la-simddetect.o)
  "tesseract::DotProductNEON(float const*, float const*, int)", referenced from:
      tesseract::SIMDDetect::SIMDDetect() in libtesseract.a(libtesseract_la-simddetect.o)
      tesseract::SIMDDetect::Update() in libtesseract.a(libtesseract_la-simddetect.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

make[1]: *** [tesseract] Error 1
make: *** [all-recursive] Error 1


Maria Vilensky

unread,
Jun 22, 2023, 12:48:27 PM6/22/23
to tesseract-ocr
If I run without host but only with this target, the make succeeds, but when using the library in Xcode iOS framework project, I'm getting

ld: in /Users/XX/XX/XX/libtesseract.a(libtesseract_la-baseapi.o), building for iOS, but linking in object file built for macOS, file '/Users/XX/XX/XX/libtesseract.a' for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)


CraigLandrum

unread,
Jun 23, 2023, 1:46:35 PM6/23/23
to tesseract-ocr
Our application needs a universal build of both the leptonic and tesseract libraries.  After trying for days to try and coerce the build tools and methods to cough up a universal (arm64/x86_64) binary, I gave up and built both libraries on an M1 Mac mini and then again on an Intel iMac.  after that I copied the x86_64 libs to the M1 and used lipo to manually combine them. I build static libs to link with our document management app because I don't want to create complicated installers that have to worry about checking for and installing dynamic libraries in addition to simply dragging the signed and notarized app to the Applications folder.  In any case, building on two different macs that used the two different CPUs I need to support and then combining them was the only way I was able to get this done. 

Maria Vilensky

unread,
Jun 25, 2023, 5:19:54 AM6/25/23
to tesseract-ocr

@CraigLandrum

Do you happen to have your scripts to compile on M1? Because I ended up getting a M2 mac too, but having trouble compiling there as well - I've posted the error details two posts up. Did it work smoothly for you?

Reply all
Reply to author
Forward
0 new messages