有关静态lib编译的注意点
来源:互联网 发布:python sha.new 编辑:程序博客网 时间:2024/06/05 04:18
最近遇到过静态库编译的一些问题 仅此记录下解决方法
1. 原工程为动态库工程,现应要求将其改编成静态库编译
首先新建了一个staticlib工程,将原来的。h.cpp 文件加入到该工程中,
这里比对了下 工程设置 staticlib 中多出一个library 对话框项
c++ 对话框项中的 preprocessor 中 预定义宏出现了 “_LIB”,
对比两个 dsp工程文件中
!MESSAGE "Test - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "Test - Win32 Win32 Static Lib Debug" (based on "Win32 (x86) Static Library")
另外c++ 的code Generation 中使用的运行库 也要注意啦, 在应用lib 文件的工程中使用时要注意 使用工程的运行库与lib编译的运行库一致.
还有一点, 静态库中不应该有main入口函数 否则在应用工程中会出现dllmain 重复定义的错误.
记录下 #pragma pack() 宏意义
struct sample
{
char a;
double b;
};
若不用#pragma pack(1)和#pragma pack()括起来,则sample按编译器默认方式对齐(成员中size最大的那个)。即按8字节(double)对齐,则sizeof(sample)==16.成员char a占了8个字节(其中7个是空字节)
有个应用静态库的工程是在vs2010 中编译的,使用的运行库是vs2010 的运行库。
而静态库是使用vc6.0的编译时运行库。 在引入lib时 应用工程link时会报错, 主要问题是运行库版本不一致, 后来我使用的vs2010编译的lib静态库. 解决了部分问题。
以摘录百度网友 的《VC编译——link时报重复定义错误》 文章
C Runtime Library:
开关
对应的库
版本
/MD
MSVCRT.LIB
多线程DLL的Release版本
/MDd
MSVCRTD.LIB
多线程DLL的Debug版本
/MT
LIBCMT.LIB
多线程静态链接的Release版本
/MTd
LIBCMTD.LIB
多线程静态链接的Debug版本
/clr
MSVCMRT.LIB
托管代码和非托管代码混合
/clr:pure
MSVCURT.LIB
纯托管代码
C++ Standard Library:
开关
对应的库
版本
/MD
MSVCPRT.LIB
多线程DLL的Release版本
/MDd
MSVCPRTD.LIB
多线程DLL的Debug版本
/MT
LIBCPMT.LIB
多线程静态链接的Release版本
/MTd
LIBCPMTD.LIB
多线程静态链接的Debug版本
编译器会自动根据编译选项,选择对应的LIB文件。一般情况下这不会出现问题。
然而,在部分情况下,一旦你的程序的各个部分(LIB, OBJ…)并非由相同的编译选项编译出,而Link在一起的话,会出现各种各样的看似很难解决的问题,这类问题主要以重复定义的错误形式存在,通常的解决方法也很简单,就是选择同样的编译选项进行编译之后再Link。
不同编译库的作用:
1. LIBCMT:C Runtime库的多线程静态链接的Release版本
2. LIBCPMT:C++ Standard Library的多线程静态链接的Release版本
3. MSVCPRTD:C++ Standard Library的多线程DLL的Debug版本
4. MSVCRTD:C Runtime Library的多线程DLL的Debug版本
参考:http://blog.csdn.net/techweb/article/details/1937308
- 有关静态lib编译的注意点
- 有关静态lib编译的注意点
- VC 编译Lib DLL需要注意的几点
- 有关函数声明的小注意点
- 有关函数声明的注意点
- 有关函数声明的注意点
- Linux下编译一个静态链接的程序的注意点
- 使用VS2017静态编译sqlite3,生成静态的sqlite3.lib
- zlib库编译使用,编译好的LIB静态库
- 有关用户界面测试注意点
- g++编译pthread_create函数的注意点
- 编译静态的BOOST libs *-vc90-mt-sgd.lib
- mingw opencv静态编译所需要链接的lib
- 使用VS2010编译sqlite3,生成静态的sqlite3.lib
- Opencv3.2的静态编译lib及引用
- 类的静态构造函数的其他几个注意点
- C++类的静态成员【需要注意的几点】
- JAVA关于静态变量的初始化需要注意的点
- ListView 优化
- 全国计算机技术与软件专业技术资格(水平)考试,高级的三科分别考什么内容?
- java 反射 基本知识——构造器
- JDK 7 中的 Fork/Join 模式
- Js中的window.parent ,window.top,window.self 详解
- 有关静态lib编译的注意点
- SMRAM
- java wsdl反向生成源码,并使用CXF实现客户端调用代码
- 整数移位
- NSDate 北京时间
- 算法时间复杂度分析
- CheckBox的OnCheckedChangeListener、OnClickListener、OnTouchListener
- log4j处理tomcat日志
- CentOS无线网络配置