windows/Linux下动态库导出函数小结
来源:互联网 发布:php如何防止xss攻击 编辑:程序博客网 时间:2024/05/16 13:43
1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden")))
2. gcc 在链接时设置 -fvisibility=hidden,则不加 visibility声明的都默认为hidden; gcc默认设置 -fvisibility=default,即全部可见;
3. 使用export map,gcc -Wl,--version-script=export.map, 在export.map中指定
{<span style="white-space:pre"></span>global:export_func;<span style="white-space:pre"></span>local:*;};则除了export_func外,全部为内部可见;
4. 使用libtool的export-symbols选项,没试过,略;
以上方法,对于gcc的visibility功能需要 gcc 4以上版本,
常见的宏,用于等同于 windows下的 __declspec(dllexport)
#if defined _WIN32 || defined __CYGWIN__ #ifdef BUILDING_DLL #ifdef __GNUC__ #define DLL_PUBLIC __attribute__((dllexport)) #else #define DLL_PUBLIC __declspec(dllexport) // Note: actually gcc seems to also supports this syntax. #endif #else #ifdef __GNUC__ #define DLL_PUBLIC __attribute__((dllimport)) #else #define DLL_PUBLIC __declspec(dllimport) // Note: actually gcc seems to also supports this syntax. #endif #define DLL_LOCAL#else #if __GNUC__ >= 4 #define DLL_PUBLIC __attribute__ ((visibility("default"))) #define DLL_LOCAL __attribute__ ((visibility("hidden"))) #else #define DLL_PUBLIC #define DLL_LOCAL #endif#endif
实践中发现几个有意思的东西[实验环境为ubuntu 9.10, gcc 4.4.1]:1. gcc -fvisibility=hidden 只在链接时传入的.c文件起作用,对.o文件不其作用;比如test.c test1.c, 使用以下命令:gcc -shared -fvisibility=hidden -o test.so test.c test1.c和命令gcc -c test.c test1.cgcc -shared -fvisibility=hidden -o test.so test.o test1.o生成的test.so中的对应可见性是不一样的, 使用“readelf -s test.so”查看发现:第一个达到预期目的,即将两个.c文件中的functions设为HIDDEN,而第2个则不行,-fvisibility=hidden不起作用;再用gcc -shared -fvisibility=hidden -o test.so test.o test1.c生成的so,则可发现test1.c中的函数为HIDDEN,但test.o中的函数仍为DEFAULT;2. 实验通过export map的方法,通过readelf总是发现函数仍然可见,后来搜索发现:需同时使用ld --retain-symbols-file --version-script 两个选项方能达到 使得elf文件中的.dynsym和.symtab中的符号表都得到控制;其中--retain-symbols-file控制静态符号表,--version-script则对应dynamic符号表;
0 0
- windows/Linux下动态库导出函数小结
- Linux下gcc编译控制动态库导出函数小结
- Linux下gcc编译控制动态库导出函数小结
- Linux下gcc编译控制动态库导出函数小结
- Linux下gcc编译控制动态库导出函数小结
- Linux下gcc编译控制动态库导出函数小结 .
- Linux下gcc编译控制动态库导出函数小结
- Linux下gcc编译, 控制动态库导出函数
- Linux从动态库导出函数
- linux动态链接库导出函数控制
- 控制linux动态链接库导出函数
- linux动态链接库导出函数
- linux动态链接库导出函数控制
- linux动态链接库导出函数控制
- 控制linux动态链接库导出函数
- linux动态链接库导出函数控制
- Linux下动态库使用小结
- Linux下动态库使用小结
- C++学习笔记(一)函数模板与类模板
- [转]notifyDataSetChanged() 动态更新ListView
- PHP 网页调用本地exe程序实例
- hdu 3717 Rescue 二分加队列优化(技巧)
- [leetcode] 263.Ugly Number
- windows/Linux下动态库导出函数小结
- 重要的开源资源及50个c/c++源代码网站
- Java的非访问控制符:static,final,abstract
- BitMap设置图片透明度
- Ubuntu下搭建tftp服务器最简单方法
- HDU 5396 Expression
- ibatis中注意事项
- Configuring WS-Security UsernameToken and WS-SecureConversation (Symmetric Connection Creation)
- GenyMotion 最好用的安卓模拟器