我正在从一个我没有源代码的静态库创建一个共享库。
许多堆栈溢出问题提供了如何做到这一点的答案:
gcc -shared -o libxxx.so -Wl,--whole-archive libxxx.a -Wl,--no-whole-archive
Run Code Online (Sandbox Code Playgroud)
但是,静态库的一些公共函数作为隐藏函数包含在共享库中:
$ nm --defined-only libxxx.a | grep __intel_cpu_indicator_init
0000000000000000 T __intel_cpu_indicator_init
$ nm libxxx.so | grep __intel_cpu_indicator_init
00000000030bb160 t __intel_cpu_indicator_init
Run Code Online (Sandbox Code Playgroud)
__intel_cpu_indicator_init 符号从导出变为隐藏。
它不是隐藏在过程中的唯一符号:
$ nm libxxx.a | grep ' T ' | wc -l
37969
$ nm libxxx.so | grep ' T ' | wc -l
37548
$ nm libxxx.a | grep ' t ' | wc -l
62298
$ nm libxxx.so | grep ' t ' | wc …Run Code Online (Sandbox Code Playgroud)