原因:静态库只是 obj 文件的集合,不会连接的。编译动态库时就需要连接了。
例如:你的代码里用到了函数 Test,但是缺少 Test 函数的实现代码。
那么编译生成静态库时不会连接 Test 的二进制代码,所以可以编译成功。
编译生成动态库时需要连接 Test 的二进制代码,所以编译失败。
解决:需要连接提示函数所在的 lib 文件。比如:提示无法连接 MessageBox 函数,
通过查询 MSDN 可知这个函数的二进制代码在 user32.lib 里。请增加如下代码:
#pragma comment(lib,"user32.lib")
即连接时使用 user32.lib 这个库文件