Articles of 静态库

“警告:将共享库链接到静态库不是可移植的”是什么意思?

我正在使用libmxml.a函数库的一个dynamic库,但我得到这个警告: *Warning: Linking the shared library libgstmatroskademux.la against the _ *static library /home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a _ is not portable! 我也得到这个警告: gcc: /home/Mr32/gst-template4_final/gst-plugin/src/libmxml.a: linker _ input file unused because linking not done 那么这个警告的意义是什么,我怎么解决呢? 编辑: 有一个已经自动生成的make文件来编译gstreamer插件。 现在,在该插件中使用libmxml.a的一些函数,我在make文件的GST_CFLAGSvariables中添加了$(PATH)/libmxml.a 。 现在,当我做了make install ,插件工作正常,但我仍然得到这个警告。

在构build期间将静态库链接到共享库?

使用GCC / Linux构build共享库时遇到问题。 目前这个共享库是用GCC / libtool选项“-shared”创build的,一切正常。 现在有两个额外的静态库(.a-files)必须被添加到这个共享库中,因为它们提供了共享所需的一些function。 添加这些静态库的选项“-l”没有帮助,之后他们不是.so文件的一部分。 那么我怎么能强制GCC / libtool真的把这些静态库的代码添加到共享库中呢? 谢谢!

我如何告诉cmake我想我的项目静态链接库?

我正在尝试使用在Linux上运行的CMake构build一个基于OpenCV的项目。 到目前为止,我的CMakeLists.txt文件看起来像 FIND_PACKAGE (OpenCV REQUIRED) … TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS}) 但是这会导致dynamic链接的库。 我如何链接静态库?

build立OpenCV作为静态库

也许我错过了一些东西,但我无法构buildopencv的静态库。 build立: Kubuntu 12.04 gcc 4.6.3 使3.81 2.8.7 opencv 2.4.6.1(最后一个可用的网站) 我手动完成所有工作。 我尝试用cmake-gui没有更多的成功。 我做它写的东西。 $ cmake -D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX = / usr / local -D BUILD_PYTHON_SUPPORT = ON -D WITH_QT = ON -D BUILD_SHARED_LIBRARIES = OFF .. (我也尝试了BUILD_SHARED_LIBRARIES = NO) 我得到的是(例如核心): libopencv_core.so libopencv_core.so.2.4 libopencv_core.so.2.4.6 libopencv_core_pch_dephelp.a 说实话,我期望libopencv_core.a 。 我是一个在Linux上build立包/ libs的新手。 我确定有些事我做错了,但我不知道是什么。 另外我不想使用dynamic库… 谢谢你的帮助! 编辑删除cmake命令行中的-D […]

我如何build立一个旧的Linux发行版的应用程序,并避免FATAL:内核太旧的错误?

我在Linux上发布一个静态链接的二进制版本的应用程序。 但是,在2.4内核的系统上,启动时会出现段错误,并显示“FATAL:kernel too old”。 我如何轻松地获得2.4内核的版本? 我需要的一些库甚至在2003年前后的旧版本的linux发行版上都没有。有没有apt-get install或者能让我轻松定位旧内核的东西?

从Java Web应用程序访问Linux本地文件系统

我们在一个web应用程序里面使用了一个java库,它是在Apache服务器中托pipe的.ReadConfFile方法在库中返回文件时找不到错误。方法如下 public byte[] ReadConfFile() { try { File file = new File("/home/product/api/conf.txt"); if(!file.exists()) return "file not found".getBytes(); byte[] buf = new byte[(int) file.length()]; FileInputStream fis = new FileInputStream(file); fis.read(buf); return buf; } catch (IOException e) { e.printStackTrace(); return null; } } 是否允许从Web应用程序访问本地文件系统? 如果是,那么是否有必须设置的访问权限?

我需要静态库来静态链接吗?

在'C'上,Linux, 我需要静态库来静态链接,或者我有足够的共享吗? 如果没有,为什么不呢? (不要包含相同的数据?)

如何在Windows上构buildgnu`libiconv`?

我想在Windows上构build一个静态库(* .LIB文件) GNU libiconv ,与Visual C ++中的其他库一起使用。 我正在使用的其他库是使用“multithreadingDLL”(/ MD)运行时选项构build的。 所以,我需要使用相同的选项来构buildlibiconv。 问题是libiconv使用GNU构build系统,我想用/ MD选项编译。 你可以在这里看到libiconv的源代码结构: http ://cvs.savannah.gnu.org/viewvc/libiconv/?root=libiconv Zlatkovic先生维护libxml2的GNU libiconv的Windows端口 你可以在这里看到他们: ftp://xmlsoft.org/libxml2/win32/iconv-1.9.2.win32.zip ftp://xmlsoft.org/libxml2/win32/iconv-1.9.2.win32.zip 我不能使用他的端口。 我需要从最新版本的libiconv-1.13开始构build。 我不知道这个人是如何移植它的? 有人可以告诉我如何从这个build立* .lib并使用MSVC编译它? 编辑: 其实,我需要build立几个相同的设置GNU库。 所以,如果我得到一个库的解决scheme。 我可以为所有其他人做同样的事情。

结合静态库

假设我有三个C静态库说libColor.a依赖于* libRGB。* a依次取决于libPixel.a 。 据说库libColor.a依赖库libRGB.a,因为在libColor.a中有一些对libRGB.a中定义的符号的引用 。 我如何将以上所有库合并为独立的新libNewColor.a ? 独立意味着新图书馆应该定义所有符号。 所以,当连接我只需要给-lNewColor 。 新库的大小应该是最小的,即它不应该在libRGB.a中包含libColor.a中没有使用的任何符号等等。我尝试使用ar命令中的各种选项(用于创build和更新静态库/档案)。

链接到可执行文件时如何强制在静态库中包含一个目标文件?

我有一个C ++项目,由于其目录结构被设置为一个静态库A ,它被链接到共享库B ,它被链接到可执行文件C 。 (这是一个使用CMake的跨平台项目,所以在Windows上我们得到了A.lib , B.dll和C.exe ,而在Linux上我们得到了libA.a , libB.so和C init函数( A_init ,在A/initA.cpp定义),从库B的init函数( B_init ,在B/initB.cpp定义)中调用,从C的main调用。 因此,当链接B , A_init (和A_init中定义的所有符号)被链接到B (这是我们所需的行为)。 问题在于, A库还定义了一个dynamic加载的函数( Af ,在A/Afort.f定义)(即,Windows上的LoadLibrary / GetProcAddress和Linux上的dlopen / dlsym )。 由于库B中没有对Af引用,所以A/Afort.o中的符号不​​包含在B 。 在Windows上,我们可以人为地使用附注来创build一个参考: #pragma comment (linker, "/export:_Af") 由于这是一个编译指令,它只能在Windows上使用(使用Visual Studio 2008)。 为了使它在Linux上工作,我们已经尝试将以下内容添加到A/initA.cpp : extern void Af(void); static void (*Af_fp)(void) = &Af; 这不会导致符号Af被包括在B的最后一个链接中。 我们如何强制符号Af被链接到B ?