2011-07-08 139 views
2

是否可以提供共享库 - 在创建期间与其他共享库的链接 - 对最终用户透明?共享库,库依赖性

至于我的意思的例子:

共享库构建

g++ ... `pkg-config gtk+-2.0 --cflags` ... `pkg-config gtk+-2.0 --libs` 

所需的用户建立

g++ file.cc -lfoo 

哪里libfoo.so.0是共享库。

如果用户构建包括pkg-config gtk+-2.0 ...,我似乎只能得到这个工作。在创建共享对象期间,有没有办法让最终用户不必担心libfoo中使用的间接库?

+0

是否有可能您正在拾取gtk lib istead的静态版本?如果是这样,那么在用户链接期间也将需要它。否则,如果它确实在使用共享库,那么在构建时就不需要它,但是在运行时将需要它。 –

回答

3

如果你有一个共享库libABC.so可链接到libXYZ.so然后,
而创建libABC.so,你必须在编译应用程序与libXYZ.so

ld --shared -o libABC.so -L. -lXYZ 

链接,

gcc app.c -L. -lABC 

唐别忘了,导出库路径

export LD_LIBRARY_PATH=. 
+0

+1您可以使用'-Wl,-rpath,.'设置'DT_RPATH',而不是依赖'LD_LIBRARY_PATH'环境变量。 –