【问题标题】:creating shared library using other library in linux使用 linux 中的其他库创建共享库
【发布时间】:2009-03-21 02:39:06
【问题描述】:

我有一个共享库说“libeval.so”。我在我的项目中使用它来创建更多名为“lidpi.so”的共享库。名为“libdpi.so”的库由工具使用。现在,该工具无法看到除“libdpi.so”以外的任何其他库。我正在使用“libeval.so”中存在的几个函数调用,而“libdpi.so”中不存在这些函数调用。 gcc中是否有任何开关,或者可以克服这个问题。

【问题讨论】:

  • 我希望完全没有问题。该工具将链接到 libpi,如果 libpi 自己需要另一个库,那么它会关心在运行时本身加载它。该工具不应该关心。

标签: c linux linker


【解决方案1】:

如果libdpi.so被设计成可以打开libeval.so,那么你的程序只需要知道libdpi.so

具体来说,libdpi.so 应该有一些函数调用dlopen,大概是这样的:

dlopen("path/to/libdpi.so", RTLD_LAZY);

然后libdpi.so 中的其他功能可以与libeval.so 交互。

编辑:要构建共享库,请使用以下命令:

gcc -shared -o libdpi.so [list of object files to go in libdpi.so]

注意:构建对象时,请使用 gcc 的 -fPIC 命令参数,如下所示:

gcc -fPIC -o foo.o foo.c

【讨论】:

  • 我不确定 libdpi.so 是如何创建的 :(
  • 嗨,不知何故,以下选项似乎正在工作:) gcc -fPIC $(ALL_OBJ) $(ALL_PATH) -leval -shared -o libdpi.so 我会尝试找到一个解释:) 我还对您的建议进行了一些研究。我猜这可能是加载库的好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2012-03-20
  • 2012-06-19
  • 2012-09-12
相关资源
最近更新 更多