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) 会被隐藏。
|