LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
2013-07-16 23:31
260 查看
对动态链接库的概念其实还很模糊,自己的理解是: 把一些常用的代码,如函数,类等,编译成一个"包"即DLL(WINDOWS下)或者SO(LINUX下)文件, 然后供其它程序使用时直接调用里面封闭的函数即可,实现的代码的重用,也节省了 硬盘空间(这点可能是次要的吧).在WIDOWS下利用VC++可方便的生成DLL,在LINUX下则需要通过 各种编译命令来实现,对于像我这种菜鸟级程序员来说是个不小的挑战. 下面用个简单的例子来说明生成一个.SO文件和如何使用它: 1.我这有几个文件: ConfigMap.cpp ConfigMap.h (读配置文件类)GetWinState.cpp GetWinState.h(ICE接口文件,由SLICE生成) GetWinSysState.cpp GetWinSysState.h (远程接口实现文件) SocDbInfo.cpp(封装的一个类,用于调用ICE接口实现相关操作) 说明:此程序是为了获得远程主机(WINDOWS)上一些系统信息,比如:CPU占用率,硬盘使用情况,数据 库连接状态,内存使用情况等. 我想利用这些文件生成动态链接库.SO,主要是调用SocDbInfo.cpp里的类.然后可以拿到任意一个系统中(LINUX)去用. 2.开始编译:$c++ -I. -I$ICE_HOME/include -c *.cpp 编译后生成连接文件(我一直这样叫,可能不对哈),即以.O结尾的 3.生成动态链接库:$c++ -shared -o libMyApp.so *.o -L$ICE_HOME/lib -lIce -lIceUtil 这样就生成了libMyApp.so文件,即我们所要的 4.使用动态链接库: 新建两个文件Demo.cpp Demo.h(使用libMyApp.so提供的一些函数), 在Demo.h中声明了libMyApp.so中提供的函数和结构体, Demo.h:代码如下: struct MemoryInf { int TotalMem;//×ÜÄÚ´æ´óС int ValidMem;//¿ÉʹÓÃÄÚ´æ´óС int VirtualMem;//ÐéÄâÄÚ´æ´óС }; struct DiskInf { int TotalSpace;//Ó²ÅÌ´óС int FreeSpace;//Ê£Óà¿Õ¼ä´óС }; struct DbInf { int DbStat;//Êý¾Ý¿â״̬:"0"±íʾÊý¾Ý¿â´¦ÔڹرÕ״̬,"1"±íʾÊý¾Ý¿âÕý³£´ò¿ª,"2"±íʾÊý¾Ý¿â´¦ÔÚ¹ÒÆð״̬ int DbConnNum;//Êý¾Ý¿âÁ¬½ÓÊý }; bool Inital( char *ResHostIP);//³õʼ»¯Í¨ÐÅÆ÷ bool DesIceCom();//Ïú»ÙICEͨÐÅÆ÷ MemoryInf GetMemInf();//µÃµ½ÄÚ´æÐÅÏ¢ int GetCpuInf();//µÃµ½CPUÕ¼ÓÃÂÊ DbInf GetDbStat();//µÃµ½Êý¾Ý¿âÐÅÏ¢ DiskInf GetDiskStat();//µÃµ½Ó²ÅÌÐÅÏ¢ 注:乱码是由于我的LINUX下不支持中文哈,是注释不用管它 Demo.cpp:代码如下: #include <string.h> #include <iostream> #include "Demo.h" int main( int argc , char* argv[]) { MemoryInf mymem; DiskInf mydisk; DbInf mydb; Inital( argv[1]); mydisk = GetDiskStat(); mymem = GetMemInf(); mydb = GetDbStat(); printf("disk total space:%d\n",mydisk.TotalSpace); printf("disk FreeSpace space:%d\n",mydisk.FreeSpace); printf("Memory TotalMem:%d\n",mymem.TotalMem); printf("ValidMem:%d\n",mymem.ValidMem); printf("VirtualMem:%d\n",mymem.VirtualMem); printf("DbConnNum:%d\n",mydb.DbConnNum); printf("DbStat:%d\n",mydb.DbStat); printf("cpu:%d\n",GetCpuInf()); DesIceCom(); return 1; } 5.编译文件生成可执行程序: 用以下命令: $c++ -lMyApp -o Demo Demo.cpp 说明:-lMyApp参数表示,用动态链接库libMyApp.so一起进行编译,对了libMyApp.so最好放在/usr/lib目录下哈 如不出意外刚会生成名为Demo的可执行文件
相关文章推荐
- LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
- LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
- LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
- Cross compile gdbserver and use it in ARM linux (在ARM uClinux下编译和使用gdbserver)
- Cross compile gdbserver and use it in ARM linux (在ARM uClinux下编译和使用gdbserver)
- Linux C/C++编译和使用so共享库
- How to Use the Dynamic Link Library in C++ Linux (C++调用Delphi写的.so文件)
- Linux中C++编译、使用动态链接库
- 在Linux中使用VS Code编译调试C++项目
- 使用VC6.0编译C++代码的时候报错:fatal error C1071: unexpected end of file found in comment(Mark ZZ)
- Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
- 7月_C++_2-->在linux下使用cmake编译gtest测试_1
- Linux中使用VS Code编译调试C++项目详解
- windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
- Linux 环境下使用g++编译C++
- LinuxC/C++编程基础(31) 使用thrift/rpc开发简单实例(续3)
- Linux中使用VS Code编译调试C++项目详解
- aix 使用g++编译c++程序的编译选项 -- linux到aix移植经验
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- linux下使用Eclipse编译调试C++ makefile项目