在CLion中通过CMake构建链接OpenAL-Soft外部项目遇链接错误
OpenAL-Soft作为CMake外部项目链接失败问题
操作流程
我在CLion中尝试通过CMake将OpenAL-Soft作为外部项目构建并链接,具体步骤如下:
1. 下载并构建OpenAL源码
使用ExternalProject_Add配置OpenAL的下载、构建和安装路径:
ExternalProject_Add(OpenAL-lib GIT_REPOSITORY https://github.com/kcat/openal-soft.git GIT_TAG makemhr SOURCE_DIR ${PROJECT_BINARY_DIR}/downloaded_dependencies/OpenAL BINARY_DIR ${PROJECT_BINARY_DIR}/builded_dependencies/OpenAL INSTALL_DIR ${PROJECT_BINARY_DIR}/dependencies/OpenAL CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DLIBTYPE=SHARED )
2. 配置包查找与链接
添加包查找命令和可执行文件链接配置:
find_package (OpenAL PATHS "${PROJECT_BINARY_DIR}/dependencies/OpenAL" NO_DEFAULT_PATH CONFIG REQUIRED) find_package(OpenAL CONFIG REQUIRED) add_executable(Nite main.cpp) target_link_libraries(Nite PUBLIC OpenAL)
错误现象
先在未添加find_package()和target_link_libraries()命令的情况下,完成了OpenAL的下载、构建和安装。之后添加这些命令并构建整个项目时,出现链接错误:
FAILED: Nite.exe C:\Windows\system32\cmd.exe /C "cd . && "C:\Users\Galo\AppData\Local\Programs\CLion Nova\bin\cmake\win\x64\bin\cmake.exe" -E vs_link_exe --intdir=CMakeFiles\Nite.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x86\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100226~1.0\x86\mt.exe --manifests -- "E:\Visual Studio\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx86\x86\link.exe" /nologo CMakeFiles\Nite.dir\main.cpp.obj /out:Nite.exe /implib:Nite.lib /pdb:Nite.pdb /version:0.0 /machine:X86 /INCREMENTAL:NO /subsystem:console dependencies\glfw\lib\glfw3dll.lib dependencies\glm\lib\glm.lib E:\VulkanSDK\Lib32\vulkan-1.lib OpenAL.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ." LINK: command "E:\Visual Studio\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx86\x86\link.exe /nologo CMakeFiles\Nite.dir\main.cpp.obj /out:Nite.exe /implib:Nite.lib /pdb:Nite.pdb /version:0.0 /machine:X86 /INCREMENTAL:NO /subsystem:console dependencies\glfw\lib\glfw3dll.lib dependencies\glm\lib\glm.lib E:\VulkanSDK\Lib32\vulkan-1.lib OpenAL.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST:EMBED,ID=1" failed (exit code 1181) with the following output: LINK : fatal error LNK1181: 无法打开输入文件“OpenAL.lib”
补充信息
- 使用
-DLIBTYPE=SHARED参数构建安装后,生成的文件是OpenAL32.dll - 将
LIBTYPE改为STATIC时,生成的文件是OpenAL32.lib
内容的提问来源于stack exchange,提问作者Galo
相关产品推荐
相关产品推荐

