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

我正在使用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 ,插件工作正常,但我仍然得到这个警告。

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

链接共享库到静态库是不可能的(除非你真的很清楚你在做什么)。 不要这样做。

第一个警告是来自libtool。 它告诉你,你要求的操作会在不同的系统上做不同的事情,其中​​一些可能不是你想要的。 通常它会以各种壮观的方式失败,因为共享库和静态库中的代码需要使用不同的编译器标志进行编译。

第二个警告是来自gcc。 这是告诉你, 编译时提供静态库是毫无意义的。 这是因为你在C FLAGS$(PATH)/libmxml.a ,它没有任何事务。 实际上,大多数情况下你不应该有$(PATH)/libmxml.a ,而是-L$(PATH) -lmxml 。 这应该仍然在LD FLAGS ,但gcc不会抱怨,如果这使得它也编译器的命令行。

确保libmxml.a中的对象文件是使用-fPIC构建的。 有必要建立一个共享库。 另见http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

这是一个简单的例子

 $ cat stat.c int five() { return 5; } $ gcc -c stat.c -fPIC $ ar crus libstat.a stat.o $ cat dynamic.c int ten() { return five() + five(); } $ gcc -c dynamic.c -fPIC $ gcc -shared -o libdyn.so dynamic.o -L. -lstat $ ldd libdyn.so # Just to show static linkage to libstat.a linux-vdso.so.1 => (0x00007fffca1b8000) libc.so.6 => /lib/libc.so.6 (0x00007fc004649000) /lib/ld-linux-x86-64.so.2 (0x00007fc004bf7000) $ cat main.c int main() { return ten(); } $ gcc main.c -L. -ldyn $ LD_LIBRARY_PATH=. ./a.out $ echo $? 10 

将共享库libgstmatroskademux.la链接到静态库

这是警告你,如果你试图在64位Linux上构建它,它可能会失败。 这是因为在x86_64上,链接到共享库中的所有代码必须使用-fPIC标志进行编译,而-fPIC.a库中的代码通常不会。

gcc:… / libmxml.a:链接器输入文件未使用,因为链接没有完成

这是警告你,你有一个虚假的命令行。 很可能你正在编译一些东西,并且在命令行上有-c (它告诉GCC在编译源码后停止,而不是执行链接)。 既然你也在同一个命令行上提供了libmxml.a ,GCC意识到你不知道你在做什么,并且警告你想一想。