使用.dll存储其他.dll或.libs

时间:2014-07-08 14:03:31

标签: c# c++ .net dll

我正在使用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中)的问题。所以我修复了这个问题(导致异常),现在一切正常。

谢谢大家的帮助。

3 个答案:

答案 0 :(得分:1)

您无法静态链接其他静态库中的静态库。您应该做的是静态链接DLL中的所有单独的静态库。链接器是否没有就此发出警告?

此外,您无法将静态库部署到另一台计算机,因为它们无法在运行时链接。

答案 1 :(得分:0)

如果我了解你的情况:

  1. 您有几个静态库(.lib
  2. 它们被链接到一个大的静态库(main.lib
  3. 您想在动态库(.dll
  4. 中使用此库

    我不确定本地发生了什么,但lib文件"已加载"在运行时 - 它们被链接到运行时加载 的动态库(因此名称"动态"或者进入可执行文件本身。所以如果你的应用程序正在运行现在,然后您已经已经将其中的一部分链接到您的dll中,或者它已链接到可执行文件中。

    所以要回答你的问题,是的,你可以将lib文件链接到dll - 它将包含所有必要的目标代码。请注意,它可能没有源库那么大 - 这取决于您的库使用了多少原始代码。

    我也不知道c#是如何影响你的情况的。

答案 2 :(得分:0)

从您的描述中,您似乎正在使用伴随DLL的* .lib存根链接以进行静态加载。您在计算机上有这些DLL,但在尝试使用DLL的其他计算机上没有。因此,为了使一切正常,请将这些DLL与DLL一起查找并复制。