使用MinGW的DirectSound:未定义的引用' DirectSoundCreate8'

时间:2018-01-21 11:25:02

标签: c++ clion mingw-w64 directsound

我想使用DirectSound API(来自DirectX)来处理音频Windows输出。为此,我创建了" libdsound.a"如以下段落所述,因为我似乎不能将.dll或.lib用于MinGW g ++编译器。
我安装了DirectX SDK并将dsound.lib复制到名为" directsound"的文件夹中。从mingw-w64存储库中,我将dsound.h和dsound.def下载到目录" directsound"同样(我使用的所有文件都是x86) 在this guide之后,我使用dlltool命令行来创建libdsound.a:

dlltool -d dsound.def -l libdsound.a

在CLion中,我通过以下方式在CMakeLists.txt中设置CMake:

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应与可执行文件放在同一目录中。

0 个答案:

没有答案