Я хочу использовать DirectSound API (из DirectX) для обработки аудио выходов Windows. Для этого я создал «libdsound.a», как описано в следующих параграфах, потому что кажется, что я не могу использовать .dll или .lib для компилятора MinGW g ++.
Я установил DirectX SDK и скопировал dsound.lib в папку с именем «directsound». Из репозитория mingw-w64 я загрузил dsound.h и dsound.def в каталог «directsound» (все файлы, которые я использовал, были для x86).
Следующий это руководство Я использовал командную строку dlltool для создания libdsound.a:
dlltool -d dsound.def -l libdsound.a
В CLion я настроил CMake в CMakeLists.txt следующим образом:
cmake_minimum_required(VERSION 3.9)
project(fourier)
set(CMAKE_CXX_STANDARD 11)
link_directories(PATHTOTHISDIR/directsound)
include_directories(PATHTOTHISDIR/directsound)
add_executable(fourier main.cpp)
target_link_libraries(fourier dsound)
CLion говорит, что файл CMakeLists.txt в порядке. Каждый раз, когда я пытаюсь скомпилировать программу, сборка и компоновка работают нормально, но затем я получаю следующее сообщение об ошибке:
[ 50%] Building CXX object CMakeFiles/fourier.dir/main.cpp.obj
[100%] Linking CXX executable fourier.exe
CMakeFiles\fourier.dir/objects.a(main.cpp.obj): In function `main':
PATHTOPROJECT/main.cpp:11: undefined reference to `DirectSoundCreate8'
collect2.exe: error: ld returned 1 exit status
...
Вот как выглядит main.cpp (единственный исходный файл):
#pragma comment(lib, "libdsound.a")
#include <windows.h>
#include <dsound.h>
int main() {
LPDIRECTSOUND8 directsound;
DirectSoundCreate8(NULL, &directsound, NULL);
WAVEFORMATEX waveformat;
// ....
РЕДАКТИРОВАТЬ Удалось решить это благодаря совету VTT. То, как я создал libdsound.a, было неверным. Это должно было быть сделано так:
dlltool -D dsound.dll -d dsound.def -l libsound.a -k
Я должен был также создать файл .def самостоятельно.
reimp -c -d dsound.lib
Файл dsound.dll должен находиться в том же каталоге, что и исполняемый файл.
Задача ещё не решена.
Других решений пока нет …