Visual Studio 2010中的动态和静态链接和部署
Dynamic and static linking and deployment in Visual Studio 2010
我在Visual Studio 2010中有一个非托管C++项目。它使用boost、供过于求和供应商提供的另一个库。
我已经设置了这个项目来创建一个更"dll independent"的可执行文件。所有的boost库都是静态链接的,在可执行文件所在的目录中不需要dll。
对于Glut也是如此,我已经链接了静态的glut32.lib而不是glut32.dll,同样没有问题。
我为运行库选择了NON dll版本,即多线程调试(用于调试配置)和多线程发布配置。
现在,我之前谈到的供应商提供了两种替代方案,一种是vendor.lib,另一种是vendor.dll。
Vendor.lib添加在Linker->Additional dependencies中,但在运行时,我总是必须将Vendor.dll放在可执行文件的同一目录中,否则运行时环境会抱怨,因为它找不到Vendor.dll库。
我应该如何解决这个问题?我想避免把.dll文件放在每个目录中。
我不想把dll放在exe的同一目录中,通常在Visual Studio中部署非托管c++控制台应用程序的指导原则是什么?
我知道关于这个论点有很多问题和篇幅,但没有一个能澄清我的这一点。
有什么想法吗?
Microsoft处理此问题的方式有点有趣:当您创建.dll中的公共符号.dll。必须链接到.lib才能在运行时,但是这个.lib仍然不是一个静态库。如果您的供应商提供了静态链接的版本,将没有.dll,或者两个.lib(可能在不同的目录中或使用不同的名称)。这只是微软进一步认真发展的又一个例子比必要的更困难。
检查供应商是否提供了另一个vendor.lib(应该比您当前的.lib大一点),这是一个静态库,并尝试链接到它。如果是这样,则不需要dll。
- 基于boost的程序的静态链接——zlib问题
- 使用gcc从静态链接的文件中查找可选符号
- 使用转换器提升 Python 问题 - 静态链接
- C++实用程序::转换在静态链接库中不起作用
- 将源中的 GLEW 与 cmake 静态链接
- 在发布模式下启动使用库的静态链接编译的应用程序时出错
- libavdevice 和 x11 的静态链接库应该以什么顺序链接?
- 静态链接启用 PIC 的库时出现链接器 PIC 错误
- 静态链接库时,收到链接器错误:找不到 -lgcc_s
- 静态链接 glibc & boost_python36 for Python extension
- 我可以在C++中配置静态链接吗?
- 协议缓冲区的静态链接会导致与现有符号冲突
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 静态链接 Visual Studio dll 到动态链接的 sfml 项目
- 我可以加载与库静态链接的 dll 吗?
- 静态链接MSVC库,动态链接Qt
- C++:找不到静态链接
- OpenSSL AES仅适用于某些计算机,即使具有静态链接也是如此
- CURL 静态链接未解析的外部符号
- 如何强制Windows.h在Visual Studio中静态链接而不是动态链接?