我想构建一个依赖于另一个.so(让我们命名为B(的共享对象(让我们将其命名为a(。B正在实现A正在使用的某个接口。
将加载A的机器也有B,所以当加载A时(在加载时或通过dlopen(,它加载B,一切都很好。问题是我无法构建B(在我正在构建A的机器上(,因此也无法构建A,因为我得到了一个链接器错误。当然,我希望在做lddA时将B视为依赖项。
是否有一个链接器选项可以在没有B的情况下构建a?
显示我的系统的图片
感谢
问题是我无法构建B(在我正在构建A的机器上(,因此无法构建A,因为我遇到了链接器错误。
这里有很多缺失的信息。
- 您有一个
B.so
版本。为什么不能将该版本复制到正在构建A.so
的机器上,并使用它来实际构建A.so
- 使用默认链接器标志,应该能够链接
A.so
,即使它使用来自B.so
的符号,而没有可用的B.so
(使用-shared
构建时默认忽略未解析的符号(
这将产生不依赖于B.so
的A.so
。在dlopen()
时,您只需先用RTLD_GLOBAL
加载B.so
,然后再加载A.so
- 如果您确实需要
A.so -> B.so
依赖项,则可以创建一个空的B.so
,并针对该的进行链接