【发布时间】:2020-04-28 18:14:10
【问题描述】:
使用 Bazel,我想将与位置无关的静态存档直接链接到共享库(而不是使用共享库的应用程序)。比如:
g++ -shared mylib.cpp archive.a -o libmylib.so
g++ mybin.cpp -lmylib -o mybin
基本原理:RedHat 将 libelf 打包为一个静态存档,其中有一些其他公共符号(例如:elf_errmsg)标记为隐藏:存档必须链接到使用它的模块(在本例中为共享库):链接到应用程序为时已晚。
我试过了:
- 将存档包装在
cc_import规则中 - 将规则添加到
cc_library的deps:不起作用,存档会链接到应用程序 - 将规则添加到
cc_library的srcs:不起作用,存档会链接到应用程序 - 将存档文件直接添加到
cc_library的linkopts:几乎可以,但是存档会链接到库和依赖它的二进制文件。 - 将存档重命名为
.lo或.pic.lo:不起作用,存档通过-Wl,wholearchive链接到应用程序 - 将
alwayslink = True添加到cc_import:不起作用,存档通过-Wl,wholearchive链接到应用程序
【问题讨论】: