这个标题很难搞清楚,让我解释一下我的情况:
另一个团队开发了一个库。他们提供了一个头文件和一个 *.so
文件。我们可以使用这个头文件并在自己的代码中包含它,如果我们希望的话。然而,*.so
文件是随着我们运行的平台一起提供的。我们无法在软件构建时获得这个 *.so
。因此,我们也不能真正使用头文件,因为链接器会期望在某个时候可用这个 *.so
。
现在我所做的是创建一个包装类,在运行时加载 *.so
文件,然后使用 dlsym()
按名称查找函数,并将它们映射到函数指针。
这是唯一的选择吗?我能否使用头文件,但告诉链接器不要在构建时解析符号,而是在我们有机会加载 *.so
文件后再尝试解析它们呢?
请注意,真正的平台是Android(通过NDK),但希望通用的Linux建议在这种情况下也适用,因为我们有POSIX API可用。