我正在使用用 MinGW g++ 编译器编译的 wxWidgets 构建一个项目。我也在使用 wxWidgets 平台的一个组件来播放 mp3 声音片段,但它不可靠,所以我去寻找另一个解决方案。我找到了 audiere 并从他们的网站下载了 1.9.4 版本。该软件包包含一个 *.lib 文件和一个 *.dll。我试图将它添加到我的项目中,但它不起作用(我认为是因为我下载的包是在 MSVC 中编译的)。
我使用名为 lib2a 的工具创建了一个 *.def 文件,以将 MSVC 库转换为可以与 MinGW 一起使用的 .a 库。def 文件有这些定义...
LIBRARY "audiere.dll" EXPORTS _AdrCreateLoopPointSource@4 _AdrCreateMemoryFile@8 _AdrCreatePinkNoise@0 _AdrCreateSampleBuffer@20 _AdrCreateSampleBufferFromSource@4 _AdrCreateSquareWave@8 _AdrCreateTone@8 _AdrCreateWhiteNoise@0 _AdrEnumerateCDDevices@0 _AdrGetSampleSize@4 _AdrGetSupportedAudioDevices@0 _AdrGetSupportedFileFormats@0 _AdrGetVersion@0 _AdrOpenCDDevice@4 _AdrOpenDevice @8 _AdrOpenFile@8 _AdrOpenMIDIDevice@4 _AdrOpenSampleSource@8 _AdrOpenSampleSourceFromFile@8 _AdrOpenSound@12 _AdrOpenSoundEffect@12
当我去链接我的项目时,我收到以下错误:
* MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x8291): 未定义引用
_imp__AdrOpenDevice@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x82db): undefined reference to
imp _AdrOpenSampleSource@8' * MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x830f): 未定义引用_imp__AdrOpenSound@12' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x87ce): undefined reference to
imp _AdrOpenDevice@ 8' * MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x8818): 未定义对_imp__AdrOpenSampleSource@8' *** MinGWUnicodeRelease/AlphaPanel.o:AlphaPanel.cpp:(.text+0x884c): undefined reference to
imp _AdrOpenSound@12' 的引用
例如,在我的代码中,函数是“OpenDevice”...在 def 文件中它是 >“_AdrOpenDevice@8”,但在我的未定义引用链接错误中,它是“ imp _AdrOpenDevice@8”。所以我的头在旋转,不知道此时该做什么。
有没有一种简单的方法可以解决 dll 中的名称修改问题?
也许用二进制编辑器编辑它以“修复”名称并让它与我现有的代码一起工作(没有下载整个audiere代码来重新编译和创建dll [如果可能的话]使用MinGW ...我想避免如果可以的话)...我的起点是一个 *.lib 文件和一个在 MSVC 中创建的 dll,但我需要在 MinGW 中使用它。
有人对如何做到这一点有任何线索吗?