C/C++:C/C++静态连接库(lib)的设计与应用
2009-02-06 17:16
211 查看
http://210.40.7.188/E'ojc/C/C_032/000.asp
C/C++:C/C++静态连接库(lib)的设计与应用
文件:mylib01.h(公布),
mylib01.cpp(生成静态库使用),test.cpp(使用静态库);
(1)C++程序设计的标准模式分三部分:例:程序
my01.CPP
(a)包含文件、全局常量变量定义(尽量少用或不用)、函数与方法说明,可写作一个单独的(***.h)文件;
(b)在Main()里调用(a)里的常量变量、函数方法完成某件工作;
(c)函数与方法的定义;
//部分a:包含文件、全局常量变量、函数与方法说明,可写作一个单独的(***.h)文件,
#include "my01.h"
//部分b:使用有关函数编程
void main(){
int kkk=1000;
cout<<sum1(100)<<endl;
cout<<sum2(100,200)<<endl;
cout<<sum1(999)-sum2(100,200);
cout<<sum3(&kkk)<<endl;
}
//部分c:函数的具体定义
int sum1(int n){
int sum = 0;
for ( int i = 1; i <= n; i++ )sum += i;
return sum;
}
int sum2(int n,int m){
int sum = 0;
for ( int i = n; i <= m; i++ )sum += i;
return sum;
}
int sum3(int *n){
int sum = 0;
for ( int i = 1; i <= *n; i++ )sum += i;
return sum;
}
其中头文件my01.h(放在my01.cpp的目录下;也可放在您需要的其它目录但编译时要设置)为:
#include <iostream.h>
int sum1(int n);
//计算(传值):1+2+…+n
int sum2(int n, int m);
//计算:n+(n+1)+…+m
int sum3(int *n);
//计算(传址):1+2+…+ n
(2)一个应用软件设计实现后,交给用户使用,
用户需要了解掌握的是(a)与(b),一般不关心(c),同时一般不要求改动(c)(或者不希望公布这里的代码),因此,应用软件常将(c)做成静态连接库使用。
(3)VC++6静态连接库的生成:
第一步:将C++应用程序按标准模式写成三部分,调试通过(实质在调试设计的函数、过程);
第二步:
建立VC++6的Win32 Static Library项目(location为:c:/000,name为mylib01,将生成mylib01.lib),将my01.cpp删除部分(a)与(b)得mylib01.cpp,将它与my01.h加入到本工程中;这时即可编译、生成mylib01.lib(在子目录/debug里)
(4)VC++6静态连接库的使用:
使用静态连接库mylib01.lib:将已经生成的mylib01.lib拷贝到某个特定目录(例如:c:/000/c/),将my01.cpp的第二部分删除得:test.cpp,将test.cpp与my01.h放到某个目录里,生成一个空工程,将test.cpp加入这个工程后,选菜单的“Project
| Settings | Link”,在“Object/library Modules”栏里加入静态库:c:/000/c/mylib01.lib
“OK”后即可编译运行!
注意1:如果将静态库放到VC++6的目录的子目录/lib中,或放到工程的主目录中(即/000/xyz),则在““Object/library
Modules”栏里可直接加入静态库名:mylib01.lib”
注意2:对于使用类Class的OOP程序,生成静态库使用的方法与上面是相同的。
注意3:生成静态库今后可在Windows下使用。
注意4:如果有一套设计好的lib,可专门放到一个目录,使用VC++6菜单“Tools
| Options | Directories Library Files ”将该目录加入,这样扩大VC++6的静态库
•
(5) 静态连接库的生成实验:
用static library项目(起名name: obj)使用下列代码生成obj.lib
//////文件:myobj.h:
#include <math.h>
#define pi 3.14159265359
int f2(int n);//计算2^n(递归函数)
class CVf2{//二分迭代解方程的抽象类
private:
double x1,x2,root;
public:
virtual double f(double)=0; //纯虚函数,在派生类中去实现
int Init(double a1,double a2);//{//找到有根区间[a1,a2],返回1
void f_2(void);//{//二分迭代解方程方法
double GetRoot(void){return root;}//返回方程的根
};
class Cf2:public CVf2{//类的实现
public:
double f(double x){return(x*x*x-100-sin(x));}
};
/////文件:objcxsj.cpp
#include "objcxsj.h"
#include <math.h>
int f2(int n){//计算2^n(递归函数)
if(n==0)return 1; else return f2(n-1)*2;
}
//二分迭代解方程的抽象类
int CVf2::Init(double a1,double a2){//找到有根区间[a1,a2],返回1
if(f(a1)*f(a2)>0)return 0; x1=a1;x2=a2; return 1; }
void CVf2::f_2(void){//二分迭代解方程方法
double fx0,fx1,fx2; fx1=f(x1);fx2=f(x2);
do{
root=(x1+x2)/2;fx0=f(root);
if(fx0*fx1<0){x2=root;fx2=fx0;}
else {x1=root;fx1=fx0;}
}while(fabs(fx0)>=0.00001);
}//;
在程序设计中应用生成的静态连接库obj.lib
注意:将obj.lib加入project时obj.lib与objtest.cpp在同一目录;也可将obj.lib放入VC++
的lib目录里,在LINK中加入obj.lib
/////文件:objtest.cpp
#include <iostream.h>
#include "objcxsj.h"
#include <math.h>
void main(){
cout<<"2的10次方="<<f2(10)<<endl;
Cf2 c,*cc; cc=&c;
double a1,a2;
do{
cout<<"请输入x1,x2:
"<<endl;cin>>a1>>a2;
}while(!(cc->Init(a1,a2)));
cout.setf(ios::floatfield);//浮点数输出
cc->f_2();cout<<"方程的根为:"<<cc->GetRoot()<<endl;
}//输出:方程的根为:4.62612
作业:(1)在Windows程序中应用静态库:obj.lib
(2)将myfounc0.cpp的函数与类做成静态库使用
C/C++:C/C++静态连接库(lib)的设计与应用
文件:mylib01.h(公布),
mylib01.cpp(生成静态库使用),test.cpp(使用静态库);
(1)C++程序设计的标准模式分三部分:例:程序
my01.CPP
(a)包含文件、全局常量变量定义(尽量少用或不用)、函数与方法说明,可写作一个单独的(***.h)文件;
(b)在Main()里调用(a)里的常量变量、函数方法完成某件工作;
(c)函数与方法的定义;
//部分a:包含文件、全局常量变量、函数与方法说明,可写作一个单独的(***.h)文件,
#include "my01.h"
//部分b:使用有关函数编程
void main(){
int kkk=1000;
cout<<sum1(100)<<endl;
cout<<sum2(100,200)<<endl;
cout<<sum1(999)-sum2(100,200);
cout<<sum3(&kkk)<<endl;
}
//部分c:函数的具体定义
int sum1(int n){
int sum = 0;
for ( int i = 1; i <= n; i++ )sum += i;
return sum;
}
int sum2(int n,int m){
int sum = 0;
for ( int i = n; i <= m; i++ )sum += i;
return sum;
}
int sum3(int *n){
int sum = 0;
for ( int i = 1; i <= *n; i++ )sum += i;
return sum;
}
其中头文件my01.h(放在my01.cpp的目录下;也可放在您需要的其它目录但编译时要设置)为:
#include <iostream.h>
int sum1(int n);
//计算(传值):1+2+…+n
int sum2(int n, int m);
//计算:n+(n+1)+…+m
int sum3(int *n);
//计算(传址):1+2+…+ n
(2)一个应用软件设计实现后,交给用户使用,
用户需要了解掌握的是(a)与(b),一般不关心(c),同时一般不要求改动(c)(或者不希望公布这里的代码),因此,应用软件常将(c)做成静态连接库使用。
(3)VC++6静态连接库的生成:
第一步:将C++应用程序按标准模式写成三部分,调试通过(实质在调试设计的函数、过程);
第二步:
建立VC++6的Win32 Static Library项目(location为:c:/000,name为mylib01,将生成mylib01.lib),将my01.cpp删除部分(a)与(b)得mylib01.cpp,将它与my01.h加入到本工程中;这时即可编译、生成mylib01.lib(在子目录/debug里)
(4)VC++6静态连接库的使用:
使用静态连接库mylib01.lib:将已经生成的mylib01.lib拷贝到某个特定目录(例如:c:/000/c/),将my01.cpp的第二部分删除得:test.cpp,将test.cpp与my01.h放到某个目录里,生成一个空工程,将test.cpp加入这个工程后,选菜单的“Project
| Settings | Link”,在“Object/library Modules”栏里加入静态库:c:/000/c/mylib01.lib
“OK”后即可编译运行!
注意1:如果将静态库放到VC++6的目录的子目录/lib中,或放到工程的主目录中(即/000/xyz),则在““Object/library
Modules”栏里可直接加入静态库名:mylib01.lib”
注意2:对于使用类Class的OOP程序,生成静态库使用的方法与上面是相同的。
注意3:生成静态库今后可在Windows下使用。
注意4:如果有一套设计好的lib,可专门放到一个目录,使用VC++6菜单“Tools
| Options | Directories Library Files ”将该目录加入,这样扩大VC++6的静态库
•
(5) 静态连接库的生成实验:
用static library项目(起名name: obj)使用下列代码生成obj.lib
//////文件:myobj.h:
#include <math.h>
#define pi 3.14159265359
int f2(int n);//计算2^n(递归函数)
class CVf2{//二分迭代解方程的抽象类
private:
double x1,x2,root;
public:
virtual double f(double)=0; //纯虚函数,在派生类中去实现
int Init(double a1,double a2);//{//找到有根区间[a1,a2],返回1
void f_2(void);//{//二分迭代解方程方法
double GetRoot(void){return root;}//返回方程的根
};
class Cf2:public CVf2{//类的实现
public:
double f(double x){return(x*x*x-100-sin(x));}
};
/////文件:objcxsj.cpp
#include "objcxsj.h"
#include <math.h>
int f2(int n){//计算2^n(递归函数)
if(n==0)return 1; else return f2(n-1)*2;
}
//二分迭代解方程的抽象类
int CVf2::Init(double a1,double a2){//找到有根区间[a1,a2],返回1
if(f(a1)*f(a2)>0)return 0; x1=a1;x2=a2; return 1; }
void CVf2::f_2(void){//二分迭代解方程方法
double fx0,fx1,fx2; fx1=f(x1);fx2=f(x2);
do{
root=(x1+x2)/2;fx0=f(root);
if(fx0*fx1<0){x2=root;fx2=fx0;}
else {x1=root;fx1=fx0;}
}while(fabs(fx0)>=0.00001);
}//;
在程序设计中应用生成的静态连接库obj.lib
注意:将obj.lib加入project时obj.lib与objtest.cpp在同一目录;也可将obj.lib放入VC++
的lib目录里,在LINK中加入obj.lib
/////文件:objtest.cpp
#include <iostream.h>
#include "objcxsj.h"
#include <math.h>
void main(){
cout<<"2的10次方="<<f2(10)<<endl;
Cf2 c,*cc; cc=&c;
double a1,a2;
do{
cout<<"请输入x1,x2:
"<<endl;cin>>a1>>a2;
}while(!(cc->Init(a1,a2)));
cout.setf(ios::floatfield);//浮点数输出
cc->f_2();cout<<"方程的根为:"<<cc->GetRoot()<<endl;
}//输出:方程的根为:4.62612
作业:(1)在Windows程序中应用静态库:obj.lib
(2)将myfounc0.cpp的函数与类做成静态库使用
相关文章推荐
- android应用开发-从设计到实现 3-8 静态原型的Appbar折叠
- Nutz 设计模式应用 --- 静态工厂方法
- librdkafka 0.8 应用到C++代码中应当使用C的链接方式
- 【日积月累】设计模式之单例模式的解析及C++应用实现
- C++静态数据成员定义及应用浅谈
- C++第三次实验-静态成员应用
- android应用开发-从设计到实现 3-5 静态原型的Appbar
- c++实验3--静态成员应用
- 深入理解C++的动态绑定与静态绑定的应用详解
- C++静态数据成员定义及应用浅谈
- C++静态数据成员定义及应用浅谈
- [转]如何借助 TLS/SSL 确保套接字连接的安全(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)
- C++临时变量的另类应用:基于iostream的类型安全的log接口设计
- C++中动态连接库与静态连接库的区别
- 读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)
- jphone项目设计介绍(一个基于C++的应用程序框架以及软电话和日志服务器应用)
- 【其实很简单】C++实现静态连接
- C++日记_17.5.11 静态成员函数的小应用一则
- android应用开发-从设计到实现 3-3 Sketch静态原型设计
- 用rpm安装mysql5.6,C++连接mysql,/usr/lib -lmysqlclient找不到的解决办法