问题陈述。有两个共享库 libA.so 和 libB.so,它们都公开了相同的函数集。现在,我有很多小程序(比如 100 个)需要链接到 libA.so 或 libB.so。
选项 1.构建两组这样的程序,一组链接到 libA.so,另一组链接到 libB.so。
选项 2.创建一个瘦包装共享库 libMy.so 并链接为:
gcc -shared -o libMy.so libA.so
gcc -o main1 -L. -lMy main1.o
这个想法是相同的内置 main1,main2 可以通过设置LD_LIBRARY_PATH
.
问题是在链接时,main1,main2,... 仍然引用 libA.so,除了 libMy.so,如命令readelf -D main1
所示。
问题是,main1 用什么样的链接器选项只直接依赖于 libMy.so,而 libMy.so 直接依赖于 libA.so 或 libB.so,实现可交换提供者。
实际示例 libA.so 和 libB.so 是两个 odbc 驱动程序,一个用于 oracle,另一个用于 postgresql。如何以独立于数据库的方式链接可执行文件?