我可以在窗口中静态链接ws2_32.lib吗?C++ MFC
Can I statically link ws2_32.lib in windows? c++ MFC
我正在尝试使用用 c++ 编写的 GUI 部署单个.exe文件。使用微软视觉工作室。
我已经使用 MFC 创建了 GUI,我可以通过将构建选项更改为:
平台工具集 - Visual Studio 2015 - Windows XP (v140_xp)MFC 的使用 - 在静态库中使用 MFC运行时库 - 多线程 (/MT)
这工作正常,并给了我一个GUI,我可以从单个.exe文件在Windows 7/XP上执行。
但是,我需要添加套接字支持,因为该程序包含一个 IRC 客户端。因此,我需要包含库:
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <boost/tokenizer.hpp>
但是,当我这样做时,它将不再编译:运行时库 - 多线程 (/MT)相反,它需要:运行时库 - 多线程调试 (/MTd)
这意味着它不再是便携式.exe
有什么想法吗?
Visual C++ 编译器在其创建的每个 obj 文件中嵌入默认库的列表。在链接期间,将处理这些默认库指令,并将库隐式添加到链接步骤中。
这意味着,如果使用不同的 C 运行时设置编译两个 obj 文件,则在链接时将包含多个 C-Runtime 库,这将发生冲突。
通常,正确的解决方案是使用与编译的代码相同的 C 运行时设置重新生成源代码,如果针对不同的运行时使用,则编译的代码预期将与特定运行时一起使用可能会失败。
但是,只需将不需要的库添加到项目的"忽略特定默认库"链接器设置中,即可强制解决这种情况。
诀窍是知道哪些实际库映射到哪些设置。
MSDN 使用运行时库列出了可以选择的各种运行时,在您的情况下,您希望从生成中排除静态多线程调试运行时,因此需要将libcmtd.lib
添加到默认库中以忽略。
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- C++ MFC Libraries in Travis CI
- JSON转换为nlohmann JSON-lib中的结构数组
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 从 bmp 文件数据创建 MFC CBitmap
- 如何在 MFC 中显示文件的所有行
- 使用 VS2015 在 Windows 10 上构建 Fortran .lib x64 位并将其链接到 C++
- 为什么我的链接器在找到Coin4d.lib后搜索Coin4sd.lib?
- 目录删除 MFC 的问题
- libcpmtd.lib有什么用?
- LNK1104:无法打开libpjproject-i386-Win32-vc14-Debug-Static.lib
- 解析引用 |exe/dll vs lib
- MFC:如何设置CEdit框的焦点?
- MFC 中的抗锯齿
- 双击更改 mfc 中列表控件中的行的颜色
- C++MFC编辑框处理双击
- 在 /usr/local/lib 下找不到库
- LLVM 编译:目标的配方 '../lib/IR/Release+Asserts/Intrinsics.gen.tmp' failed
- 提升序列化和 MFC:"cannot open file 'libboost_serialization-vc141-mt-s-x32-1_69.lib' "
- 我可以在窗口中静态链接ws2_32.lib吗?C++ MFC