You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mingw-w64静态链接OpenAL Soft遇问题求助

MinGW-w64 + Make构建C项目时OpenAL Soft链接问题解决方法

当前用mingw-w64和make构建C项目,其他库均能正常链接,但OpenAL Soft始终出问题:要么链接阶段提示调用的函数存在未定义引用(不调用相关函数则无报错),要么生成可执行文件后运行时因缺失DLL直接崩溃,后者曾出现过一次但无法复现。不使用CMake,仅需基于gcc命令的解决方案。

参考的基础Makefile:

CC=gcc
OPTS=-Iinclude -static
LIBS=-Llib -lglfw3 -lopengl32 -lgdi32

all: proj

proj: src/*.c
    $(CC) $(OPTS) $^ -o $@ $(LIBS)

此前尝试的两种失败方案:

  • 下载了标注为“适用于OpenGL的OpenAL音频库(mingw-w64)”的文件(实际关联OpenAL Soft仓库),单独使用其中的.a文件无效,梳理依赖时发现gcc-libs和libwinpthread文件夹内无.a文件,用现有.a构建仍出现函数未定义错误。
  • 查阅Stack Overflow相关问题,该问题讨论的是常规OpenAL而非OpenAL Soft,其中一条评论提到编译源码可在mingw-w64中使用OpenAL Soft,但未说明具体操作步骤。

方案1:通过MSYS2安装预编译OpenAL Soft(最简便)

  1. 打开MSYS2的mingw64终端,执行以下命令安装库:
    pacman -S mingw-w64-x86_64-openal-soft
    
  2. 修改项目Makefile:
    • 若系统未自动包含头文件路径,在OPTS后追加-I/mingw64/include
    • 在LIBS后追加-lopenal
    • 若需要静态链接,调整LIBS为:
      LIBS=-Llib -lglfw3 -lopengl32 -lgdi32 -lopenal -static-libgcc -static-libstdc++
      
  3. 运行make构建项目:
    • 动态链接时,需将mingw64/bin目录下的libopenal-1.dll复制到可执行文件同目录;静态链接则无需额外DLL。

方案2:手动编译OpenAL Soft源码

  1. 获取OpenAL Soft源码后,打开mingw64终端进入源码目录
  2. 生成Makefile(以静态库为例,动态库将OFF改为ON):
    cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF .
    
  3. 编译源码:
    mingw32-make
    
  4. 复制编译产物到项目目录:
    • 将源码include目录下的头文件复制到项目的include目录
    • 将编译生成的libopenal.a(静态)或libopenal.dll.a+libopenal.dll(动态)复制到项目的lib目录
  5. 修改项目Makefile:
    • 静态链接时,在LIBS后追加依赖库:
      LIBS=-Llib -lglfw3 -lopengl32 -lgdi32 -lopenal -lpthread -lwinmm -ldsound -lkernel32
      
    • 动态链接时,仅需在LIBS后追加-lopenal,运行时将libopenal.dll放到可执行文件同目录

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:45:27