GNAT Studio 2021下AdaOpenAL第三方音频库链接错误求助
解决方案
- 修正GPR文件错误配置:你之前填写的Compiler和Linker的Switches参数不符合GPR语法规范,gprbuild会自动处理编译命令前缀、
-c这类基础参数,不需要手动填写,路径参数前也不需要加/前缀。 - 补充OpenAL导入库链接:Windows下动态库链接需要对应导入库(
.lib文件),错误中缺失的__imp_前缀符号全部来自OpenAL核心库,你需要先确认AdaOpenAL包中提供的64位版本OpenAL32.lib所在路径,在GPR中添加库目录和链接参数。 - 确认位数匹配:你使用的是x86_64版本的GNAT 2021,需要确保所有依赖的
.lib、.dll文件均为64位版本,32位二进制文件无法被64位链接器识别。
你可以参考以下修正后的GPR配置,替换路径为你本地实际路径即可:
project Knightmare is for Source_Dirs use ("src", "../Libs/adaOpenAL", "../Libs/adaOpenAL/OalBinding", "../Libs/adaOpenAL/OalBinding/incoal"); -- 替换下方路径为你本地存放OpenAL32.lib的目录 for Library_Dirs use ("../Libs/adaOpenAL/lib/x64"); for Object_Dir use "obj"; for Main use ("main.adb"); for Languages use ("Ada", "C", "C++"); package Compiler is for Switches ("c++") use ("-std=c++11", "-fpermissive", "-I../Libs/adaOpenAL", "-I../Libs/adaOpenAL/OalBinding", "-I../Libs/adaOpenAL/OalBinding/incoal"); end Compiler; package Linker is -- 链接C++标准库和OpenAL导入库 for Switches ("Ada") use ("-lstdc++", "-lOpenAL32"); end Linker; end Knightmare;
额外注意事项
- 把AdaOpenAL包中自带的
OpenAL32.dll放到最终生成的main.exe同目录下,运行时需要加载该动态库。 - 如果还是提示找不到OpenAL库,可以把
-lOpenAL32换成对应lib文件的完整绝对路径,比如"C:/xxx/OpenAL32.lib"。 - 原shell脚本中针对macOS的framework参数不需要在Windows下添加,
-pthread参数可以直接删除,GNAT在Windows下默认使用-mthreads处理线程相关依赖。
内容的提问来源于stack exchange,提问作者Ada Lovelace
相关产品推荐
相关产品推荐

