Static library loaded twice

前端 未结 1 1330
深忆病人
深忆病人 2020-12-15 00:41

I have shared object A.so which statically links to libssl.a & another shared object B.so which also statically links libssl.a .

A.so & B.so has symbols fro

相关标签:
1条回答
  • 2020-12-15 01:20

    This is indeed expected. One instance of libssl.a interposes (likely a subset of) the other, and the results are not pretty. You can use a version script (--version-script to ld, with -Wl, for cc) to control what is exported from A.so and B.so. If something is not exported, it cannot be interposed either.

    Alternatively, you could compile libssl.a with visibility flags like -fvisibility=hidden. These flags only affect the dynamic linker and not static linking. You likely needed to compile it yourself anyway because shipped .a files tend to contain position-dependent code, meant for linking into executables. Only some platforms such as 32-bit x86 let you get away with linking such code into shared objects and only at the cost of text relocations.

    The dlopen with RTLD_LOCAL as suggested in a comment should also work but it seems hackish to use dlopen for this purpose.

    Another option is to use the same shared libssl.so in both libraries.

    0 讨论(0)
提交回复
热议问题