我的背景是 C#,但我必须保留一些遗留的 (MS) C++。在那个代码库中我偶然发现:
#pragma comment(lib, "OtherLib700.lib")
其中 700 是一些版本控制。除此之外,该库还有一个同名的 DLL。
我首先认为该程序将依赖于 DLL,但将其从系统中删除后,该程序仍然可以运行。不过,该 DLL 存在一个更新版本,名为 OtherLib900...
看起来程序“包含”了库的代码,因此它不再依赖于外部 DLL。 (或者程序“自动”使用较新的 DLL...)
哪一个是正确的?有没有办法进一步证实这个“假设”?
That pragma
用于链接到指定的.lib
文件。这是在项目设置的外部依赖项字段中指定库的替代方法。
大多数情况下,它用于支持不同的版本:
#ifdef USE_FIRST_VERSION
#pragma comment(lib, "vers1.lib")
#else
#pragma comment(lib, "vers2.lib")
#endif
当您的应用程序使用动态链接库时,lib
文件告诉您有关导出的符号的信息dll
。所以基本上你只需要lib
编译和链接,但你需要dll
运行该程序,因为它包含所有二进制代码。
你说有一个相关的dll
,通常表示lib
文件仅包含链接信息,没有代码。如果关联的,您应该得到一个运行时错误dll
没找到。您可以向 MSVS 检查是否有不同版本的dll
已加载或是否从其他位置加载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)