parent
a72dfb7728
commit
507fafb0ad
|
@ -0,0 +1,6 @@
|
||||||
|
# Objdump 基本使用
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看共享库符号表
|
||||||
|
objdump -tT <shared library>
|
||||||
|
```
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Readelf 基本使用
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看共享库符号表
|
||||||
|
readelf -s <shared library>
|
||||||
|
```
|
|
@ -0,0 +1,39 @@
|
||||||
|
# GCC 库导出符号控制
|
||||||
|
|
||||||
|
GCC 编译库的时候默认导出所有符号。可通过指定以下参数选择默认的导出方案:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
-fvisibility=default|internal|hidden|protected
|
||||||
|
```
|
||||||
|
|
||||||
|
如果设置成了 hidden,那么,可在函数前增加
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
__attribute__ ((visibility("default")))
|
||||||
|
```
|
||||||
|
|
||||||
|
属性使其外部可见,或指定其属性。如:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
/**
|
||||||
|
* @file example.c
|
||||||
|
*/
|
||||||
|
void func0(void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__ ((visibility("default")))
|
||||||
|
void func1(void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
然后:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gcc -shared -o libexample.so -fvisibility=hidden example.c
|
||||||
|
```
|
||||||
|
|
||||||
|
则 void func1(void) 将被导出,而 void func0(void) 会被隐藏。
|
Loading…
Reference in New Issue