visual studio c ++静态链接做什么

phö*_*hön 0 c++ linker static visual-studio

我想从pcap文件中读取并使用winpcap libary(http://www.winpcap.org/).下载后我安装了它(因此我认为他们的dll被复制到我的系统正在搜索它们的某个地方).我想STATIC链接libary到我的项目,因为我不想每次在另一台计算机上添加winpcap dll(如果计算机安装了winpcap我也不会有问题).

在visual studio中,我添加了headerfiles和libary路径的include路径.然后我将libarys"libwpcap.a"和"libpacket.a"添加到其他依赖项中.(目录中还有文件"wpcap.lib"和"packet.lib",我认为它们用于动态链接?).我的代码工作正常,但当我将可执行文件移动到我的其他计算机,我之前没有安装winpcap,它说缺少wpcap.dll ..所以它只是动态链接,我是对的吗?

但这种情况我想阻止.所以我怎么能告诉链接器,他必须将它静态链接..该死的我现在正在寻找它.但我不知道我做错了什么:(想.a文件得到静态链接和.lib文件用于动态链接.

Asa*_*saf 7

在使用VS在Windows上进行链接时,让我们分开三种模式:

  1. "完整"静态链接 - 完全嵌入最终映像(可执行文件)的.lib文件.不需要其他文件.
  2. "纯粹的"动态链接 - 构建时不进行链接.执行此操作时,您需要在运行时使用例如LoadLibrary()手动加载.dll文件(动态库),然后使用例如GetProcAddress()手动请求要调用的函数的地址.
  3. "混合"模式,这意味着你链接到一个'stub'.lib文件,该文件不包含函数的实现,但会自动导致可执行文件的加载器加载相关的DLL并获取所有使用函数的地址("导入表").

模式#1和#3的.lib文件是不同的.创建哪个文件取决于库的创建者为其构建项目的设置:如果是"静态库",将创建一个完整的.lib文件.如果是"动态库",将创建存根.lib文件和.dll文件.如果使用存根.lib文件,则可执行文件将需要运行时可用的.dll文件.

解决您的问题:如果您下载的发行版中没有完整的.lib文件,您可以下载完整的WinPCap源代码(可从他们的网站获得)并自行构建为静态库.

但请注意,许可证可能不允许您这样做.我不知道 - 你应该自己检查一下.

另见: