gcc编译笔记

目录

  • __attribute__()

attribute()

  • 限制函数的使用权限:但是需要在GCC 4.0及以上版本中才可以用
#define _LOCAL __attribute__((visibility("hidden")))
#define _API __attribute__((visibility("default")))
  • “default”:用它定义的符号将被导出,动态库中的函数默认是可见的。意味着该方法对其它模块是可见的,其它模块(可执行文件或者动态库)可以通过符号表访问该方法。
  • ”hidden”:用它定义的符号将不被导出,并且不能从其它对象进行使用,动态库中的函数是被隐藏的。该方法符号不会被放到动态符号表里,所以其它模块(可执行文件或者动态库)不可以通过符号表访问该方法。
_API int test(int a)
{
	return ++a;
}
  • 所以test(int a)这个函数可以被其他的模块访问使用,当然如果什么都不加也是一样的效果,但是如果写好一份程序,只希望用这个so的人访问规定的几个接口,那么用__attribute__关键字来修饰函数的访问权限那将是极好的。

你可能感兴趣的:(Linux,c语言,c++)