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