visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。

g++在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man g++中-fvisibility部分);若需要对特定函数的可见性进行设置,需在代码中使用__attribute__设置visibility属性。

编写大型程序时,可用-fvisibility=hidden设置符号默认隐藏,针对特定变量和函数,在代码中使用__attribute__((visibility("default")))令该符号外部可见,这种方法可用有效避免so之间的符号冲突。

//.cpp

__attribute ((visibility("default"))) int engine_init(config_ *cfg)

{}

//makefile

CC = g++
CFLAGS += -Wall -Werror ${HDTCL} -fPIC  -fvisibility=hidden

结果是:

engine_init接口外部可见,其他没有添加__attribute ((visibility("default")))说明的接口外部不可见。

gcc __attribute__关键字举例之visibility相关推荐

  1. GNU C - Using GNU GCC __attribute__ mechanism 01 Function Attribute

    近来阅读glibc源码的时候遇到很多关于__attribute__的问题,索性就查找了相关的资料,学习了一下. 要是不解决了这个问题,有的时候还真的是比较难下手.就拿glibc来说,使用xcscope ...

  2. mysql关键字举例说明

    以下是 MySQL 5.7 中57个关键字的用法举例: ADD:用于添加新列.索引.约束等,例如: ALTER TABLE table_name ADD new_column INT(11) NOT ...

  3. ARM 之十一__weak 和 __attribute__((weak)) 关键字的使用

      今天在使用 Keil (主要是 armcc 编译器)编译代码(华大的 MCU 驱动库hc32f46x_interrupts.h / c)的时候遇到了有 __weak 关键字的函数不起作用的问题,甚 ...

  4. __weak 和 __attribute__((weak)) 关键字的使用

    今天在使用 Keil (主要是 armcc 编译器)编译代码(华大的 MCU 驱动库hc32f46x_interrupts.h / c)的时候遇到了有 __weak 关键字的函数不起作用的问题,甚是奇 ...

  5. __attribute__中的constructor和destructor

    1.前言 最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数.于是从字面意思猜想,该函数会在 ...

  6. 【GCC系列】深入理解Linux内核 -- __visible宏定义

    __visible宏定义 在Linux的内核源码里,尤其是一些关键的内核函数,会包含__visible宏,它是用来做什么的呢? asmlinkage __visible void __init __n ...

  7. __attribute__ ((packed))

    1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,g ...

  8. @清晰掉 GNU C __attribute__

    __attribute__((packed))详解 1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有 ...

  9. 【GCC系列】深入理解Linux内核 -- __no_sanitize_address宏定义

    本文使用的Linux源码内核版本:Linux 5.10.0 __no_sanitize_address宏定义: 在Linux的内核源码里,尤其是一些关键的内核函数,会包含__no_sanitize_a ...

最新文章

  1. 请还互联网产业一个朗朗乾坤
  2. linux 垃圾桶快捷键,Linux的基本:为网上邻居配个垃圾桶
  3. R语言实战应用精讲50篇(十四)-R语言构建层次分析模型
  4. jQuery 库 - 特性
  5. Active Directory相关博客
  6. npm 全局安装vuecli报错_前端脚手架CLI生成模版命令工具(包括,npm包的发布,脚手架的搭建,注意事项,优化等)...
  7. warning LNK4099:未找到 PDB 问题解决方案
  8. 使用共享内存作为进程互斥锁的代码
  9. read from and write to file
  10. 东芝打印机共享怎么设置_东芝2303am网络打印设置教程
  11. 金蝶KIS应用虚拟化集成解决方案
  12. 校园网破解|校园网wifi破解|校园网免认证教程-SaoPanel
  13. 《2017中国云计算评测报告》
  14. Python实现一键翻译英文论文,实现了pdf文档英译汉,pdf格式不变
  15. 大学英语综合教程二 Unit 8 课文内容英译中 中英翻译
  16. python编写简单脚本
  17. 使用代理服务器+FRPC 连回家庭网络方案| 群晖 代理
  18. Angular Material 学习笔记 Chips
  19. 盘后股价上涨6% 美光能否结束水逆?
  20. Altera PDN 设计和 FPGA 收发器性能

热门文章

  1. Centos7.1 命令行与图形化界面登陆
  2. python的c语言扩展方法简介
  3. CodeForces - 1607D Blue-Red Permutation(贪心)
  4. CodeForces - 1557D Ezzat and Grid(线段树+dp)
  5. atlas mysql 读写分离_MySQL读写分离工具Atlas
  6. kafka 削峰_从面试角度一文学完 Kafka
  7. 获取网络时间并刷新本地时间(源码2)
  8. Simpleperf介绍
  9. 高级数据结构与算法 | 回溯算法(Back Tracking Method)
  10. Error:java: 无效的标记 -version 编译错误的解决办法