Construyendo y vinculando OpenAL-Soft con CMake como un proyecto externo

Resuelto Galo asked hace 6 meses • 0 respuestas

Estoy intentando crear y vincular OpenAL-Soft ( https://github.com/kcat/openal-soft/tree/master ) con CMake como un proyecto externo en CLion.

Obtengo archivos fuente OpenAL a través de:

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
)

luego busco el paquete con:

find_package (OpenAL PATHS "${PROJECT_BINARY_DIR}/dependencies/OpenAL" NO_DEFAULT_PATH CONFIG REQUIRED)
find_package(OpenAL CONFIG REQUIRED)

y finalmente enlace a mi ejecutable:

add_executable(Nite main.cpp)
target_link_libraries(Nite PUBLIC OpenAL)

En primer lugar, descargo, construyo e instalo OpenAL sin los comandos find_package() y target_link_libraries(), luego los agrego y construyo el proyecto completo, en este punto aparece el siguiente error:

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: no se puede abrir el archivo de entrada 'OpenAL.lib'

Cuando construyo e instalo OpenAL obtengo un OpenAL32.dll, si cambio la opción LIBTYPE a ESTÁTICO obtengo un OpenAL32.lib

Galo avatar Feb 17 '24 02:02 Galo
Aceptado

Bueno, lo resolví, al vincular la biblioteca al ejecutable el objetivo debería ser OpenAL::OpenAL en lugar de solo OpenAL. Quiero decir:

right way: target_link_libraries(Nite PUBLIC OpenAL::OpenAL)
wrong way: target_link_libraries(Nite PUBLIC OpenAL)
Galo avatar Feb 16 '2024 20:02 Galo