小编Éti*_*nne的帖子

从静态库创建共享库时保留所有导出的符号

我正在从一个我没有源代码的静态库创建一个共享库。

许多堆栈溢出问题提供了如何做到这一点的答案

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)

gcc shared-libraries

6
推荐指数
1
解决办法
2613
查看次数

标签 统计

gcc ×1

shared-libraries ×1