【发布时间】:2012-09-05 15:50:50
【问题描述】:
我正在使用用 MinGW g++ 编译器编译的 wxWidgets 构建一个项目。我也在使用 wxWidgets 平台的一个组件来播放 mp3 声音片段,但是它不可靠,所以我去寻找另一个解决方案。我找到了 audiere 并从他们的网站下载了 1.9.4 版本。该软件包包含一个 *.lib 文件和一个 *.dll。我试图将它添加到我的项目中,但它不起作用(我认为是因为我下载的包是在 MSVC 中编译的)。
我使用名为 lib2a 的工具创建了一个 *.def 文件,以将 MSVC 库转换为可以与 MinGW 一起使用的 .a 库。 def 文件有这些定义...
库“audiere.dll” 出口 _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 toimp_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代码来重新编译并使用MinGW创建dll [如果可能的话] ...我如果可以的话,想避免这种情况)...我的起点是一个 *.lib 文件和一个在 MSVC 中创建的 dll,但我需要在 MinGW 中使用它。
有人知道怎么做吗?
【问题讨论】:
标签: visual-c++ dll linker mingw name-mangling