我已经使用leptonica(影像库)中的功能在Windows中制作了DLL,并按需要通过其他库(zlib,pnglib,jpeglib,jpeg2000,libtiff)的附件对它们进行了调节。
现在,我想在Ubuntu中进行相同的操作,这里我已经构建了所有支持库,并且我坚持按照自己的要求从它们制作单个动态库文件,我通过调用编写了Imaging.c文件功能和根据我对leptonica的要求来对输出进行模块化,现在我面临的问题是,要从该文件制作单个动态库.so文件,而又不依赖其他文件,因此我可以在其他任何应用程序上使用它Ubuntu,仅加载单个so文件... 当我试图从该Imaging.c文件中创建线程安全日志文件时,我也遇到很多权限问题。在这里,我试图转储将从Imaging.so生成的日志,以便何时从任何包装的上层应用程序调用它。.
答案 0 :(得分:0)
您可以先在Linux下创建一个大的.so
文件,方法是首先编译该.so
文件所依赖的所有库的静态版本(取决于库的构建过程,例如添加{{1 }} --enable-static
作为运行--disable-shared
的参数是一种选择)。
configure
将创建一个gcc -shared -o bigfile.so yourobject1.o yourobject2.o -Lsomepath -lsomedependency
文件。根据架构,将所有代码编译为与位置无关(.so
),即将目标文件编译为
-fPIC
这也适用于静态链接库依赖项(如有必要,在makefile中添加gcc -fPIC -c yourobject1.c
标志)。如果动态(-fPIC
)和静态库(.so
)同时存在于同一目录中,则链接程序通常会首选动态目录。要覆盖此设置,您可以将.a
替换为-Lsomepath -lsomedependency
。
使用
somepath/libsomedependency.a
如果gcc -shared -o bigfile.so yourobject1.o yourobject2.o -Wl,--whole-archive /fullpath/libsomedependency.a
本身未引用libsomedependency.a
中的某些对象,但是您要最终链接的可执行文件引用了它们。
在此处查看类似的问题/答案:https://stackoverflow.com/a/4922106/10678162