【发布时间】:2014-03-21 16:11:30
【问题描述】:
我的程序可以使用某个库(我们称之为 foo),而这个库是非免费的。所以我不想在编译时和运行时都让它成为一个依赖项。该库仅提供了不错的额外功能,因此该程序可以在没有 foo 的情况下运行。所以我打算这样做:
- 让 configure 在编译时查找 foo,如果不存在,则构建 该程序没有额外的功能。这部分很简单。
- 如果 foo 存在则 #include foo.h,但不要链接到共享 库(因为程序必须能够在没有 foo 的情况下运行 present),而是使用 dlopen(foo.so) 和 dlsym()。
那么,如果我仍然要使用动态链接,为什么还要包含 foo.h 呢?好吧,因为 foo.h 具有我在使用库中的函数时需要的数据类型和枚举的所有定义。其中有很多,其中一些很复杂,所以这似乎是一种简单的方法来掌握它们。它似乎在我的第一次测试中起作用。
但是,我找不到任何使用 dlopen() 的示例,其中还包含库头,所以恐怕我在做一些完全愚蠢的事情。我以前从未使用过动态链接。那么这是正确的方法吗?
【问题讨论】:
标签: c header dynamic-linking dlopen