linux编译符号那些事儿
来源:互联网 发布:mac os系统支持网游 编辑:程序博客网 时间:2024/05/21 21:49
其实符号这个概念,有点底层功底的程序员都应该晓得。其实就是标志的意思。比如说,标志属性(变量),一个行为(函数)或者其他。
在linux下编译,时间长了,一定会遇到使用【nm】【ldd】【readelf】的时候。
不扯淡了,直接进入到今天的正题。你跟着这边文章看下来,你应该可以学会下面几点:
1,dlopen可能比-llibrary的编译更靠谱。(我也不知道为什么)
2,dlopen不能打开【还存在未定义符号】的动态库
3,类什么时候会报未定义
好了,我们直接切入主题:
工程介绍
1,1.h 1.cpp ==> 1.so
2,main.cpp ===> main(采用动态加载动态库的技术)
代码
1.h
class A{public: A(); ~A();}
extern "C"{ A* GetAddr() { return new A(); }};
1.cpp
A::A(){}
注意:我没有实现析构函数。
你可以编译成1.so
main.cpp
#include <dlfcn.h>#include "1.h"int main(){void* module = dlopen("./lib1.so", RTLD_LAZY);if (module == NULL){cout << dlerror() << endl;}return 0;}
编译的时候指定-rdynamic -ldl -fPIC
好啦~
你应该在运行的时候报A这个类符号未定义。
使用nm看看lib1.so吧,发现果然A这个符号是U型的
参考http://blog.csdn.net/wusoule/article/details/11770149
到此为止,你应该明白了
2,dlopen不能打开【还存在未定义符号】的动态库
3,类什么时候会报未定义
至于第一点,我弄清楚了再说。
- linux编译符号那些事儿
- '符号连接'那些事儿
- Java编译那些事儿
- Java编译那些事儿
- 反编译那些事儿(六)—所编译得.class文件带有$符号
- Linux usb那些事儿
- Linux权限那些事儿
- Linux权限那些事儿
- Linux权限那些事儿
- Linux权限那些事儿
- Linux shell那些事儿
- Linux压缩那些事儿
- Linux signal那些事儿
- Linux signal那些事儿
- linux终端那些事儿
- Linux压缩那些事儿
- Linux signal那些事儿
- linux 那些事儿系列
- Android 完美的隐藏软键盘方法
- UITableView 详解 教程
- 指针运算符
- Java IO流学习总结
- 三星手机wifi一开,其他电脑断网,三星手机攻击网络????
- linux编译符号那些事儿
- JDBC连接数据库的工具包代码
- 二进制
- UVa 79 ClockHands (water ver.)
- nyoj-660-逃离地球
- js跨浏览器将字符串转化为xml对象
- 测试流程规范
- Amazon Campus(2013-Sep-24)Question 2 / 2 (Amazon Campus(17):Find the differences of items in amazon)
- 用递归求最大公约数