GCC with Windows SDK?
GCC with Windows SDK?
我得到了很多关于如何使用GCC构建本机Windows应用程序的相互矛盾的信息。
基本上,我想从一个熟悉的角度学习Windows编程。我想了解哪些库需要包含在哪些标题等中的细节。所以我可以对底层实现有所了解。我觉得视觉工作室通过有时似乎不透明的构建过程带走了很多东西(当我包含标题时,库会自动链接,这让我很沮丧,让我很难看到什么在做什么)
编辑:感谢Ben和Serge指出最后陈述的虚假性。VS 不会根据包含的标头自动包含库,而是链接许多默认库,而不管包含哪些标头,但是只有翻译单元所需的函数/类等才会最终出现在最终可执行文件中。
有没有一种方法可以让我使用 Windows API(即不是 libc)但使用不太"用户友好"的环境来为 Windows 开发?
我更愿意坚持使用GCC(MinGW等),但我对其他工具链持开放态度。我只是想了解一下视觉工作室的臃肿和抽象。
我可以只下载Windows SDK并开始使用MinGW构建吗?如果没有,我在哪里可以获得本机开发所需的标头和库?它会使用 minGW 之类的东西正确编译吗?
很多问题!
谢谢!
摘要:请参阅Serge非常有用的答案!
感谢大家提供的信息!
如果要执行命令行构建,没有什么可以阻止您编写自己的 NMake 文件,该文件描述使用哪些标志编译哪些文件以及如何将它们全部链接到自己的可执行文件中。
窗口编译器是cl.exe。
窗口链接器是链接.exe
(或其免费变体Visual Studio Express)不会自动找到与标头关联的库。默认情况下,它使用一组标准库。但我可以告诉你,一旦你使用较少的标准API,你将不得不同时声明头和库。如果您更深入地查看项目属性,您会发现编译和链接阶段的确切命令行。
您可以使用MSVC工具或MingW工具,但切勿尝试混合它们!对象格式彼此不兼容
编辑:
我现在将在我所知道的版本(MSVC Express 2008)中描述它是如何工作的。该项目的配置可在 Project / Properties
下找到。您通常在这里找到 2 个配置(Debug
和 Release
),但始终可以通过 Configuration Manager
添加新的特殊构建配置。您可以选择要处理的配置(或选择All configurations
以在任何地方应用更改。
在Configuration properties
下,您可以找到(除其他外)C/C++
(编译阶段)和Linker
(链接阶段)的项目,其中包含用于调整几乎所有内容的菜单。最后一个菜单始终Command line
,并提供将使用的实际命令行。
如果您使用其他版本,您的里程可能会有所不同,但我总是能够在旧 MSVC 版本的 Project / Properties
下找到配置......
编辑 2 :
关于默认库的列表,链接器独立于您可能在不同源中使用或不使用的标头使用它们。但由于它们是库而不是对象模块,因此只有程序直接或间接实际需要的对象模块(包含在库中)才会以可执行文件结尾。我几乎从未使用过"忽略默认库"选项。主要是当我想确保我没有使用系统库来减小可执行文件的大小时,对于一个非常特殊的用例。
- 升级到 Windows 10 版本 1809 SDK 后,我无法编译使用 C++/WinRT 的项目
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- C++/WinRT,Windows SDK 17134的一部分与Visual Studio 15.8 Preview 3
- 如何在Windows Media Foundation SDK中指定语言列表对象
- CMAKE:查找/添加Visual Studio或Windows SDK库和标头的正确方法?
- CMake linking Windows SDK
- 我需要哪个SDK确保Windows 7在Visual Studio C 2017中的兼容性
- Windows SDK 控制可用的函数
- 当 Windows SDK 版本设置为 15063.13 时"LNK1104 Cannot open file 'kernel32.lib' "
- Visual Studio 2017中的Windows SDK版本设置
- 如何通过 Windows SDK 以编程方式访问"netsh"API
- DirectX 11 调试器需要 Windows SDK 10,但它在 IDE 中处于选中状态并存在于系统中
- 无法使用Yocto生成适用于Windows的SDK
- Windows SDK 8:关于安装位置,文件夹命名法和Windowssdkdir_old Env变量的混乱
- 哪个Windows SDK最适合我C++Win32
- 致命错误 C1189:#error:Windows SDK 版本错误
- OpenGL重新定义错误与Windows SDK文件相冲突时
- 在Windows Intellij Idea中配置C SDK
- 适用于Windows应用商店的Facebook SDK
- windows sdk 7.1 64位构建的CloseHandle显然不在kernel32.lib中