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