You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10环境下用Clang C++构建64位GLFW库的方法咨询

我来帮你梳理下在Windows 10上用Clang构建64位GLFW库的完整步骤——其实思路和你之前用MinGW+CMake的流程差不多,只是需要明确指定Clang作为编译器,细节上有些小调整,我分两种方式给你讲:

准备工作
  • 确保你已经安装了Clang for Windows(选64位版本,安装时一定要勾选“Add LLVM to PATH”,这样终端才能直接调用clang命令)
  • CMake要保持安装状态且已加入系统PATH(你之前用过应该没问题)
  • 下载GLFW的最新稳定版源代码包,解压到本地任意目录,比如D:\glfw-source
方式一:终端命令行构建(推荐)
  1. 打开x64 Native Tools Command Prompt for VS——这一步很关键!Clang在Windows上需要依赖VS的工具链来处理Windows相关的链接工作,用这个命令行可以确保是纯64位的编译环境
  2. 进入GLFW源码目录,创建并进入build文件夹:
    cd D:\glfw-source
    mkdir build
    cd build
    
  3. 运行CMake配置命令,指定Clang作为编译器,同时明确64位目标:
    cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
    
    给你解释下几个关键参数:
    • -G "MinGW Makefiles":因为Clang可以配合MinGW的make工具编译;如果你没装MinGW的make,也可以用Ninja(先装Ninja并加入PATH,把-G改成"Ninja"即可)
    • -DCMAKE_C_COMPILER=clang-DCMAKE_CXX_COMPILER=clang++:强制指定用Clang而非默认的GCC
    • -DCMAKE_BUILD_TYPE=Release:构建发布版库,想要Debug版本就改成Debug
    • -DBUILD_SHARED_LIBS=ON:生成动态库(.dll),如果需要静态库就改成OFF
  4. 启动编译:
    mingw32-make -j8  # -j8是用8线程编译,根据你的CPU核心数调整,比如4核就写-j4
    # 要是用Ninja的话,直接输入:ninja
    
    编译完成后,去build/src目录就能找到生成的64位GLFW库文件了(比如glfw3.dll和对应的导入库glfw3.lib
方式二:CMake GUI可视化构建

如果你更喜欢图形界面操作:

  1. 打开CMake GUI,在「Where is the source code」选GLFW源码目录,「Where to build the binaries」选刚才创建的build文件夹
  2. 点击Configure,弹出的窗口里选「MinGW Makefiles」(或Ninja),勾选「Specify native compilers」,点Next
  3. 在C编译器路径里选LLVM安装目录下的clang.exe(比如C:\Program Files\LLVM\bin\clang.exe),C++编译器选clang++.exe,点Finish
  4. 配置完成后,在CMake GUI的选项列表里可以按需调整:
    • 勾选BUILD_SHARED_LIBS切换动态/静态库
    • 设置CMAKE_BUILD_TYPE为Release或Debug
    • 可以取消GLFW_BUILD_EXAMPLESGLFW_BUILD_TESTS这些不需要的选项,加快编译速度
  5. 点击Generate生成构建文件,之后要么点Open Project,要么直接去build文件夹里运行mingw32-makeninja编译
  6. 编译完成后同样在build/src目录取生成的库文件
几个要注意的点
  • 绝对不要用普通的CMD或PowerShell直接操作,一定要用x64的VS工具命令行,否则可能会生成32位库
  • 如果编译时遇到链接错误,大概率是环境变量没加载全,重新打开x64工具命令行再试一次
  • 要是你不需要GLFW的文档、示例这些,CMake配置时直接取消对应选项,能省不少编译时间

内容的提问来源于stack exchange,提问作者Dre4msNoEvil

火山引擎 最新活动