【发布时间】:2010-08-30 12:05:22
【问题描述】:
我创建了一个通信库,它静态链接到几个不同的应用程序。该库支持通过不同类型的硬件进行通信。供应商通过共享库支持某些硬件。在没有这些硬件的系统上,共享库不可用。
之前我们通过编译通信库和应用程序的双重版本来处理这个问题。然而这不是很实用,所以我考虑使用更动态的通信库,如果可用,它会尝试使用 dlopen()/dlsym() 加载供应商库。这似乎运作良好。但问题是每个使用我的库的人在将他们的应用程序与我的库链接时都需要传递 -ldl 选项。即使这是一个小麻烦,我想知道这通常是如何解决的。
是否有可能创建一个静态库来自动(在编译时或运行时)引入所需的共享库?
让静态库依赖于共享库是否被认为是一种好习惯?
编辑:我知道 libtool 可能会解决这个问题,但这仍然会进一步改变所有应用程序的构建过程,我希望避免这种情况。
编辑 2:目标平台主要是 Linux 和 Solaris。 Gcc 作为编译器。
【问题讨论】:
-
什么操作系统?除非您更具体,否则很难回答...
-
对不起,忘了提到操作系统。编辑添加。
标签: c shared-libraries unix