链接共享库与Linux的其他共享库 [英] Linking a shared library with another shared lib in linux

查看:119
本文介绍了链接共享库与Linux的其他共享库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图构建一个共享库。让我们说libabc.so它采用另一个.so文件,说lib123.so(在/ usr / local / lib目录一个lib)。现在我用我的共享库libabc.so在我的应用程序。说我的-app.I想知道我应该链接这些二进制文件??我不希望我的应用程序内直接lib123.so链接。我的应用应该只libabc.so挂钩。我怎样才能做到这一点?

I am trying to build a shared library. Let us say libabc.so .It uses another .so file , say lib123.so (a lib in /usr/local/lib) .Now i am using my shared lib libabc.so in my application. say my-app.I want to know how i should link these binaries??i don't want to link my-app with lib123.so directly. my-app should be linked with only libabc.so. How can i do this?

在此先感谢。我使用的G ++编译器

Thanks in advance. I am using g++ compiler

推荐答案

假设 libabc.so 是的 posiition独立对象code文件 abc1.pic.o abc2.pic.o ;那么你已经建立他们例如

Suppose that libabc.so is obtained from posiition independent object code files abc1.pic.o and abc2.pic.o ; then you have built them with e.g.

 gcc -Wall -fPIC -O -g abc1.c -c -o abc1.pic.o
 gcc -Wall -fPIC -O -g abc2.c -c -o abc2.pic.o

和你建立 libabc.so

gcc -shared  abc1.pic.o  abc2.pic.o -L/usr/local/lib -l123 -o libabc.so

我加入 -L在/ usr / local / lib目录 -l123 因为我假设你有一个 /usr/local/lib/lib123.so 共享库。

I added -L/usr/local/lib before -l123 because I am assuming you have a /usr/local/lib/lib123.so shared library.

阅读也是程序库方法文档

正如你所见,你可以链接共享库 lib123.so 到自己的共享库 libabc.so

As you see, you may link a shared library lib123.so into your own shared library libabc.so

然后用 LDD libabc.so

PS。不要使用 lib123.a 静态库(它应该是PIC)。如果您链接非PIC code到一个共享对象,你失去大部分的共享对象的优势,动态连接器的 ld.so 要做的搬迁不计其数。

PS. Don't use a static library for lib123.a (it should be PIC). If you link non-PIC code into a shared object, you lose most of the advantages of shared objects, and the dynamic linker ld.so has to do zillions of relocations.

这篇关于链接共享库与Linux的其他共享库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆