一.
有3个静态库文件, 分别是Lib.lib, Lib1.lib, Lib2.lib;
Lib.lib中有函数Fun; Lib1中有函数Fun1; Lib2中有函数Fun2.
其中Lib1的Fun1使用了Lib的Fun; Lib2的Fun2也使用了Lib的Fun.
VC在编译Lib1和编译Lib2时, 并不需要使用到Lib.lib文件.
也就是说在连接生成Lib1.lib和Lib2.lib时, 并没有连接Lib.lib.
二.
现在有一个控制台程序使用Lib1.lib的Fun1和Lib2.lib的Fun2.
VC编译连接的时候就报缺少Fun函数(Fun函数就是Lib.lib中的函数)
#pragma comment(lib, "lib.lib") // 添加这一句即可
#pragma comment(lib, "lib1.lib")
#pragma comment(lib, "lib2.lib")
三.
有一点像C++的多重继承的菱形继承).
很明显的一点, VC在编译连接静态库时, 假设该静态库还使用了另外的静态库, 此时并没有真正连接这个另外的静态库的.
而在连接成exe或者dll时才真正连接.
有3个静态库文件, 分别是Lib.lib, Lib1.lib, Lib2.lib;
Lib.lib中有函数Fun; Lib1中有函数Fun1; Lib2中有函数Fun2.
其中Lib1的Fun1使用了Lib的Fun; Lib2的Fun2也使用了Lib的Fun.
VC在编译Lib1和编译Lib2时, 并不需要使用到Lib.lib文件.
也就是说在连接生成Lib1.lib和Lib2.lib时, 并没有连接Lib.lib.
二.
现在有一个控制台程序使用Lib1.lib的Fun1和Lib2.lib的Fun2.
VC编译连接的时候就报缺少Fun函数(Fun函数就是Lib.lib中的函数)
#pragma comment(lib, "lib.lib") // 添加这一句即可
#pragma comment(lib, "lib1.lib")
#pragma comment(lib, "lib2.lib")
三.
有一点像C++的多重继承的菱形继承).
很明显的一点, VC在编译连接静态库时, 假设该静态库还使用了另外的静态库, 此时并没有真正连接这个另外的静态库的.
而在连接成exe或者dll时才真正连接.
在dll的菱形关系中, 也有类似的情况, 但以前好像遇到过, 如果使用静态编译DLL, exe的编译就会出错, 但现在没有验证.