抑制共享库的编译时链接

我正在整合一个DRM库,因为安全原因,这个DRM库不能在代码库中保留。 DRM库在运行时只会在安全目标设备上处于清除状态,因此只能在运行时进行链接。 这给编译时链接带来了一个问题。

例如,如果我正在创build依赖DRM库libDrm.so的my_library.so,那么如果我简单地从构build中删除libDrm.so,则“ld:can not find -lDrm”gcc -fPIC -shared -o my_library.so my_library.c -L。 -lDrm

我知道dynamic加载libDrm.so的符号是一个解决scheme,但我不想编写代码在开发的这个阶段做dynamic加载。 我正在寻找快速和肮脏的东西。 我基本上想告诉LD忽略在编译时libDrm.so不能被find的事实,因为LD在运行时能够find它。 我怎样才能做到这一点? 我没有看到LD在编译时需要libDrm.so的原因,如果它在运行时可用,所以我希望LD足够灵活以允许这样做。

我目前正在考虑链接从stubs编译的libDrm.so版本,以使构build成功完成。 在运行时,从真正的实现中创build的libDrm.so版本将被链接到。

任何人都知道一个深奥的链接器选项,我可以使用LD来告诉LD延迟所有有关libDrm.so的链接操作,直到运行时?

Solutions Collecting From Web of "抑制共享库的编译时链接"

我正在寻找快速和肮脏的东西。

创建名为libDrm-stub.so存根库,并将SONAME设置为libDrm.so

在该库中,提供您所调用的所有函数的无所作为的实现。 将二进制文件与该存根库链接,但不要将其发送到设备上。

(要设置SONAME ,使用SONAME-Wl,--soname=libDrm.so链接libDrm-stub.so

我目前正在考虑链接从stubs编译的libDrm.so版本,以使构建成功完成。

这是正确的方法。

任何人都知道一个深奥的链接器选项,我可以使用LD来告诉LD延迟所有有关libDrm.so的链接操作,直到运行时?

你可以尝试使用-Wl,--unresolved-symbols=ignore-all ,但是这更容易出错,所以我建议不要这样做。