作为一个菜鸟+小白,我已经无数次被dll惹出的那些事儿打败。“undefined reference 无法解析的外部符号”是最常见的问题。
1 库文件缺失
用设备提供商的SDK进行开发的时候,SDK包里面一堆文件,有些很明显需要引用,有些却是隐含调用的;应该确保它们都包含在工程中。
dll缺失有时编译能通过,但运行时突然崩溃,有时会出现提示信息“During startup program exited with code 0xc0000139.” 错误代码对应的错误是Dll entry point not found;或者提示“无法定位程序输入点”。
2 库文件版本不匹配
常见于采用二次封装的库时。
例如你引用的库Miss.dll是在库Prince.dll的版本1.2.34.0基础上开发。那么确保你工程中的Prince.dll的版本号也是1.2.34.0。
3 库文件编译环境与当前环境不一致
例如Miss.dll是由MSVC编译生成的c++库,程序则用MinGW编译;又比如Miss.dll是由32位MSVC编译生成,程序用的是64位MSVC编译环境。