40 lines
662 B
Markdown
40 lines
662 B
Markdown
|
# 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) 会被隐藏。
|