当前位置:  开发笔记 > 编程语言 > 正文

如何静态链接.DLL?

如何解决《如何静态链接.DLL?》经验,为你挑选了2个好方法。

我们有一个由VS构建的(纯本机C++).DLL.作为客户端,我们有一些本机C++应用程序和围绕这个用C++/CLI编写的DLL的.Net-Wrapper.最后,有一些用C#编写的.Net-Wrapper客户端应用程序.

我的问题是native.dll必须以与.Net世界不同的方式分发,并且VS不会跟踪该DLL.因此,要让我的所有C#应用程序正常工作,我必须将其复制到每个可执行文件目录中,或者将其放在%PATH%中(我会避免在开发人员计算机上,因为他们可能希望使用不同版本的DLL启动不同的应用程序).如果存在引用Wrapper-DLL的UserControl,则会出现更大的问题:您必须将DLL复制到VS的目录或再次复制到%PATH%.但最坏的情况发生在我们的翻译工具上.该工具跟踪.Net-Assemblies并将它们打包到可以发送给外部翻译器的Translator-packages中.据我所知,没有办法将原生.DLL放入该包中!

所以我打算将原生DLL静态链接到.Net-Wrapper,这将解决我的问题.但对于我们的Native应用程序,此本机DLL仍必须是DLL.

所以我有两个选择:

制作两个项目(一个生成静态库;一个创建动态库=>我尽量避免这种情况)

找到一个静态链接DLL的解决方案

找到一种让VS从一个项目生成两个输出的方法

小智.. 7

在dll的C++项目文件中,创建两个配置,一个生成DLL,另一个生成.lib.两个项目不是必需的,因为任何.NET/C++项目都可以支持多个构建配置(这就是Release和Debug版本以不同方式构建的方式).



1> 小智..:

在dll的C++项目文件中,创建两个配置,一个生成DLL,另一个生成.lib.两个项目不是必需的,因为任何.NET/C++项目都可以支持多个构建配置(这就是Release和Debug版本以不同方式构建的方式).



2> Ismael..:

另一种选择是有两个项目,一个项目将输出一个可以静态链接的.lib,另一个项目将输出.dll并将你的.lib作为依赖项,你应该将.def添加到你的.dll中您计划导出的符号,否则它将为空.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有