如何调整Tesseract项目以静态链接到Leptonica

时间:2015-10-04 12:33:54

标签: tesseract static-linking autotools libtool leptonica

我目前正在尝试将现有项目静态链接到其主要依赖项,以减少生成的输出库的大小。我试图改变的项目是依赖于Leptonica图像处理库的Tesseract OCR。

目前,Leptonica计算2481个功能,但Tesseract仅使用其中的163个。换句话说,在Tesseract中只使用了6.5%的Leptonica功能,但是整堆代码(3,5 MB +附加库)将被加载并保存在内存中。这可能不是桌面系统的问题。但是在内存有限的移动设备上,使用未使用的代码占用几个MB的代价太高了。

我希望使用静态链接减少这个Tesseract + Leptonica对的整体尺寸。这两个项目都使用autoconfig / automake / libtool构建系统。

Leptonica的构建产生静态和动态库。 Tesseract在其configure.ac中使用以下行来声明Leptonica依赖:

AC_CHECK_LIB(lept,pixCreate,[],AC_MSG_ERROR([Leptonica library missing]))

因为上面提到的行确实自动将Leptonica添加到$ LIBS,所以我将其更改如下:

AC_CHECK_LIB(lept,pixCreate,[LIBS="-Bstatic -llept -Bdynamic $LIBS"],AC_MSG_ERROR([Leptonica library missing])))

当我运行./configure和make时,一切正常,但Tesseract仍将动态链接到Leptonica。

在检查相应的make日志时,我注意到g ++链接调用只是忽略了我的“-Bstatic”属性,而是链接到共享库(liblept.so):

libtool: link: g++ -m32  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/4.8/crtbeginS.o  -Wl,--whole-archive ./.libs/libtesseract_api.a ../ccmain/.libs/libtesseract_main.a ../cube/.libs/libtesseract_cube.a ../neural_networks/runtime/.libs/libtesseract_neural.a ../textord/.libs/libtesseract_textord.a ../wordrec/.libs/libtesseract_wordrec.a ../classify/.libs/libtesseract_classify.a ../dict/.libs/libtesseract_dict.a ../ccstruct/.libs/libtesseract_ccstruct.a ../cutil/.libs/libtesseract_cutil.a ../viewer/.libs/libtesseract_viewer.a ../ccutil/.libs/libtesseract_ccutil.a ../opencl/.libs/libtesseract_opencl.a -Wl,--no-whole-archive  -Wl,-rpath -Wl,/home/maxpol/Dokumente/javacpp-presets-myfork/tesseract/cppbuild/linux-x86/lib -Wl,-rpath -Wl,/home/maxpol/Dokumente/javacpp-presets-myfork/tesseract/cppbuild/linux-x86/lib -L/home/maxpol/Dokumente/javacpp-presets-myfork/tesseract/cppbuild/linux-x86/lib/ -lz /home/maxpol/Dokumente/javacpp-presets-myfork/tesseract/cppbuild/linux-x86/lib/liblept.so -lpthread -L/usr/lib/gcc/i686-linux-gnu/4.8 -L/usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu -L/usr/lib/gcc/i686-linux-gnu/4.8/../../../../lib -L/lib/i386-linux-gnu -L/lib/../lib -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/i686-linux-gnu/4.8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/i686-linux-gnu/4.8/crtendS.o /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/crtn.o  -m32   -pthread -Wl,-soname -Wl,libtesseract.so.3 -o .libs/libtesseract.so.3.0.4

我已经咨询过autotools文档和其他几个项目,但找不到任何有用的信息。所以我决定在这里提出这个问题。

我错过了重要的事情吗?

非常感谢您的帮助! 最好的祝福 最大

0 个答案:

没有答案