我正在使用Visual Studio 2010,而我正在尝试创建.dll。我的.dll使用外部库.lib。该库还包含其他库(.lib)的集合。
所以:我的main.lib是一个libs集合的容器 - 结果它大约300mb。
现在当我在我的dll中使用lib时,它的链接很好并且它在我的电脑上正常工作。但是当我将编译好的程序部署到另一台计算机时,它无法加载.lib。即使我已将它放入.dll的目录中,它也无法找到它。
现在我的问题:我有没有办法将.lib的所有功能存储在.dll中?所以.dll文件大约300mb,但我不再需要部署.lib了?
更新:
非常感谢你的回答。为了描述我的问题,我想向您展示我的程序输出:
未处理的异常:System.Runtime.InteropServices.SEHException:外部组件抛出异常。
我花了很多时间使用谷歌来解决此错误。我发现丢失文件的问题(我的一个"外部组件"(。dll))无法找到类的定义等等或其他方面访问权限问题。
我尽力解决这个问题,一次尝试就取得了成功,可以使用这个程序。我知道这是因为我把main.lib放到了正确的文件夹中,所以我的程序可以找到它。但现在我不知道在哪里放这个main.lib。所以:我的程序再次被打破,现在我想解决它...我希望这个描述有所帮助。描述它很难,因为我不确切地知道问题是什么......
更新2:
感谢您的帮助,我解决了我的问题。起初我误解了.dll和.lib的工作原理。如果其他人有这个问题并将被重定向到这篇文章,那么@D Stanley的回答将会有所帮助。
感谢@David Heffernan我发现它并没有丢失任何导致此错误的.lib或其他内容。这是我的本机C ++代码(位于.lib中)的问题。所以我修复了这个问题(导致异常),现在一切正常。
谢谢大家的帮助。
答案 0 :(得分:1)
您无法静态链接其他静态库中的静态库。您应该做的是静态链接DLL中的所有单独的静态库。链接器是否没有就此发出警告?
此外,您无法将静态库部署到另一台计算机,因为它们无法在运行时链接。
答案 1 :(得分:0)
如果我了解你的情况:
.lib
)main.lib
).dll
)我不确定本地发生了什么,但lib
文件不"已加载"在运行时 - 它们被链接到运行时加载 的动态库(因此名称"动态"或者进入可执行文件本身。所以如果你的应用程序正在运行现在,然后您已经已经将其中的一部分链接到您的dll中,或者它已链接到可执行文件中。
所以要回答你的问题,是的,你可以将lib
文件链接到dll
- 它将包含所有必要的目标代码。请注意,它可能没有源库那么大 - 这取决于您的库使用了多少原始代码。
我也不知道c#是如何影响你的情况的。
答案 2 :(得分:0)
从您的描述中,您似乎正在使用伴随DLL的* .lib存根链接以进行静态加载。您在计算机上有这些DLL,但在尝试使用DLL的其他计算机上没有。因此,为了使一切正常,请将这些DLL与DLL一起查找并复制。