c - "Warning: Linking the shared library against static library is not portable"是什么意思?

标签 c linux warnings shared-libraries static-libraries

我正在使用 libmxml.a 库的某些函数制作一个动态库,但我收到此警告:

*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_CFLAGS 变量中添加了 $(PATH)/libmxml.a。现在,当我执行 makemake install 时,插件工作正常,但我仍然收到此警告。

最佳答案

确保 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

关于c - "Warning: Linking the shared library against static library is not portable"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8352617/

相关文章:

linux - Tomcat 查看 catalina.out 日志文件

python - 如何找到生成 Pandas SettingWithCopyWarning 的行?

C - 不兼容的指针到整数转换?

c++ - va_arg 给出运行时错误

c - 如何在 Linux 上通过静态库同步进程?

python - 生成固定大小的虚拟数据包

java - 从参数中将字符串内容分配给 Java 中的新字符串

c - 将第一个字节设置为 0 或使用 memset 到 "reset"整个缓冲区

c - *** 检测到 glibc *** sendip : free(): invalid next size (normal): 0x09da25e8 ***

linux - 如何在 Windows 7 中设置最大 UDP 缓冲区大小