lin*_*llo 8 c++ deployment visual-studio-2010 static-linking visual-c++
我在Visual Studio 2010中有一个非托管的C++项目.它使用boost,glut和供应商提供的另一个库.
我已经设置了项目来创建更多"dll-indepenendent"可执行文件.所有的boost库都是静态链接的,并且在可执行文件所在的目录中不需要dll.
对于Glut来说,我已经链接了静态glut32.lib而不是glut32.dll,并且没有问题.
我已经为运行时库选择了NON-dll版本,即多线程调试(用于调试配置)和多线程用于发布配置.
现在,我之前说过的供应商提供了两个供应商:Vendor.lib和Vendor.dll.
Vendor.lib添加在链接器 - >附加依赖项中但在运行时我总是必须将Vendor.dll放在可执行文件的同一目录中,否则运行时环境会抱怨,因为它找不到Vendor.dll库.
我该如何解决这个问题?我想避免在每个目录中放入.dll文件.
我不想将dll放在exe的同一目录中,一般来说在Visual Studio中部署非托管c ++控制台应用程序的指导原则是什么?
我知道有很多关于这个论点的问题和页面,但这些都没有澄清我的观点.
有些想法?
Jam*_*nze 10
微软处理它的方式有点滑稽:当你创建一个.dll时,你也创建一个.lib,它包含.dll中的公共符号.您必须链接.lib才能在运行时加载.dll,但是.lib仍然不是静态库.如果您的供应商提供静态链接的版本,则将没有.dll或两个.lib(可能在不同的目录中或具有不同的名称).只是另一个微软认真开发的例子比必要的更困难.
Vendor.lib需要是一个静态编译的库.如果你链接它时仍然需要Vendor.dll,听起来像Vendor.lib实际上是一个导入库而不是静态库.
检查供应商是否提供了另一个Vendor.lib(它应该比当前的.lib大一点),这是一个静态库并尝试链接到它.如果是这样,你将不需要该DLL.