如何解决PortAudio Test应用程序-未解析的外部符号Pa_GetVersionInfo
背景
我下载了https://github.com/PortAudio/portaudio并编译了一个DLL(已删除ASIO支持)。 我正在运行Windows 10 ... Visual Studio2019。使用msvc文件夹中的文件,我创建了64位dll。在build / msvc /文件夹下,它创建了一个新的x64 / release子文件夹,我看到以下文件:
cp@DESKTOP-ESLJ8N0:/mnt/c/Users/cp/source/github/portaudio/build/msvc/x64/Release$ ls -lah
total 3.8M
drwxrwxrwx 1 cp cp 4.0K Oct 6 14:56 .
drwxrwxrwx 1 cp cp 4.0K Oct 6 14:56 ..
-rwxrwxrwx 1 cp cp 13K Oct 6 14:56 pa_allocation.obj
-rwxrwxrwx 1 cp cp 118K Oct 6 14:56 pa_converters.obj
-rwxrwxrwx 1 cp cp 5.3K Oct 6 14:56 pa_cpuload.obj
-rwxrwxrwx 1 cp cp 5.3K Oct 6 14:56 pa_debugprint.obj
-rwxrwxrwx 1 cp cp 3.0K Oct 6 14:56 pa_dither.obj
-rwxrwxrwx 1 cp cp 66K Oct 6 14:56 pa_front.obj
-rwxrwxrwx 1 cp cp 21K Oct 6 14:56 pa_hostapi_skeleton.obj
-rwxrwxrwx 1 cp cp 60K Oct 6 14:56 pa_process.obj
-rwxrwxrwx 1 cp cp 14K Oct 6 14:56 pa_ringbuffer.obj
-rwxrwxrwx 1 cp cp 7.1K Oct 6 14:56 pa_stream.obj
-rwxrwxrwx 1 cp cp 2.0K Oct 6 14:56 pa_trace.obj
-rwxrwxrwx 1 cp cp 17K Oct 6 14:56 pa_win_coinitialize.obj
-rwxrwxrwx 1 cp cp 190K Oct 6 14:56 pa_win_ds.obj
-rwxrwxrwx 1 cp cp 25K Oct 6 14:56 pa_win_ds_dynlink.obj
-rwxrwxrwx 1 cp cp 1.5K Oct 6 14:56 pa_win_hostapis.obj
-rwxrwxrwx 1 cp cp 18K Oct 6 14:56 pa_win_util.obj
-rwxrwxrwx 1 cp cp 664K Oct 6 14:56 pa_win_wasapi.obj
-rwxrwxrwx 1 cp cp 19K Oct 6 14:56 pa_win_waveformat.obj
-rwxrwxrwx 1 cp cp 344K Oct 6 14:56 pa_win_wdmks.obj
-rwxrwxrwx 1 cp cp 29K Oct 6 14:56 pa_win_wdmks_utils.obj
-rwxrwxrwx 1 cp cp 154K Oct 6 14:56 pa_win_wmme.obj
-rwxrwxrwx 1 cp cp 1.3K Oct 6 14:56 pa_x86_plain_converters.obj
-rwxrwxrwx 1 cp cp 0 Oct 6 14:56 portaudio.Build.CppClean.log
-rwxrwxrwx 1 cp cp 287 Oct 6 14:56 portaudio.dll.recipe
-rwxrwxrwx 1 cp cp 3.4K Oct 6 14:56 portaudio.log
drwxrwxrwx 1 cp cp 4.0K Oct 6 14:56 portaudio.tlog
-rwxrwxrwx 1 cp cp 0 Oct 6 14:56 portaudio.vcxproj.FileListAbsolute.txt
-rwxrwxrwx 1 cp cp 214K Oct 6 14:56 portaudio_x64.dll
-rwxrwxrwx 1 cp cp 7.4K Oct 6 14:56 portaudio_x64.exp
-rwxrwxrwx 1 cp cp 13K Oct 6 14:56 portaudio_x64.lib
-rwxrwxrwx 1 cp cp 1.5M Oct 6 14:56 portaudio_x64.pdb
-rwxrwxrwx 1 cp cp 268K Oct 6 14:56 vc142.pdb
cp@DESKTOP-ESLJ8N0:/mnt/c/Users/cp/source/github/portaudio/build/msvc/x64/Release$
很酷。到目前为止一切顺利。
接下来,我创建一个控制台应用程序以尝试测试DLL。我就是这样:
具体来说,我想做这样的事情: https://github.com/PortAudio/portaudio/blob/master/examples/pa_devs.c
我首先执行以下操作: a)创建一个称为“ portaudio-listdevices-command”的Windows控制台应用程序。它创建了一个“ hello world”解决方案。它可以编译并运行没有问题。 b)我劫持了默认的“ ConsoleApplication1.cpp”文件,并尝试将所有逻辑从pa_devs.c复制到此cpp文件中。 cpp文件中的代码如下所示:
c)我将来自portaudio解决方案的所有头文件直接复制到我的客户端应用程序文件夹中。
如果有帮助,这是客户端应用程序的文件夹结构:
cp@DESKTOP-ESLJ8N0:/mnt/c/Users/cp/source/github/portaudio-listdevices-command/ConsoleApplication1$ ls -lah
total 156K
drwxrwxrwx 1 cp cp 4.0K Oct 7 08:16 .
drwxrwxrwx 1 cp cp 4.0K Oct 6 15:34 ..
drwxrwxrwx 1 cp cp 4.0K Oct 6 15:34 .vs
-rwxrwxrwx 1 cp cp 8.1K Oct 6 17:00 ConsoleApplication1.cpp
-rwxrwxrwx 1 cp cp 1.5K Oct 6 15:34 ConsoleApplication1.sln
-rwxrwxrwx 1 cp cp 7.9K Oct 7 08:29 ConsoleApplication1.vcxproj
-rwxrwxrwx 1 cp cp 992 Oct 6 15:34 ConsoleApplication1.vcxproj.filters
-rwxrwxrwx 1 cp cp 168 Oct 6 15:34 ConsoleApplication1.vcxproj.user
drwxrwxrwx 1 cp cp 4.0K Oct 7 08:05 Debug
-rwxrwxrwx 1 cp cp 5.8K Oct 6 13:24 pa_asio.h
-rwxrwxrwx 1 cp cp 2.9K Oct 6 13:24 pa_jack.h
-rwxrwxrwx 1 cp cp 3.9K Oct 6 13:24 pa_linux_alsa.h
-rwxrwxrwx 1 cp cp 7.6K Oct 6 13:24 pa_mac_core.h
-rwxrwxrwx 1 cp cp 3.5K Oct 6 13:24 pa_win_ds.h
-rwxrwxrwx 1 cp cp 24K Oct 6 13:24 pa_win_wasapi.h
-rwxrwxrwx 1 cp cp 8.9K Oct 6 13:24 pa_win_waveformat.h
-rwxrwxrwx 1 cp cp 5.0K Oct 6 13:24 pa_win_wdmks.h
-rwxrwxrwx 1 cp cp 6.9K Oct 6 13:24 pa_win_wmme.h
-rwxrwxrwx 1 cp cp 48K Oct 6 13:24 portaudio.h
drwxrwxrwx 1 cp cp 4.0K Oct 7 08:16 x64
cp@DESKTOP-ESLJ8N0:/mnt/c/Users/cp/source/github/portaudio-listdevices-command/ConsoleApplication1$
问题
当我尝试编译客户端应用程序时,这是我得到的错误:
Error LNK2019 unresolved external symbol Pa_GetVersionInfo referenced in function main ConsoleApplication1 C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\ConsoleApplication1.obj 1
到目前为止,我已经尝试过:
Project --> Properties --> Linker --> Input --> Additional Dependencies --> "portaudio_x64.lib"
Project --> Properties --> VC++ Directories --> Library Directories --> c:\Users\cp\source\github\portaudio\build\msvc\x64\Release
头文件只是从portaudio源文件夹直接复制到客户端应用程序,所以现在我有了:
在我的ConsoleApplication1.cpp文件中,当我将鼠标悬停在对Pa_GetVersion()的调用上时,它确实为我提供了上下文帮助,并向我展示了该函数的作用。这是否证明lib文件正在工作?
任何帮助将不胜感激。
** DUMPBIN结果**
PS C:\Users\cp\source\github\portaudio\build\msvc\x64\Release> dumpbin /exports portaudio_x64.dll
Microsoft (R) COFF/PE Dumper Version 14.27.29111.0
copyright (C) Microsoft Corporation. All rights reserved.
Dump of file portaudio_x64.dll
File Type: DLL
Section contains the following exports for portaudio_x64.dll
00000000 characteristics
FFFFFFFF time date stamp
0.00 version
1 ordinal base
68 number of functions
48 number of names
ordinal hint RVA name
52 0 0001CE10 PaUtil_InitializeX86PlainConverters = PaUtil_InitializeX86PlainConverters
55 1 00003110 PaUtil_SetDebugPrintFunction = PaUtil_SetDebugPrintFunction
56 2 0000D100 PaWasapi_GetAudioClient = PaWasapi_GetAudioClient
58 3 0000D140 PaWasapi_GetDeviceCurrentFormat = PaWasapi_GetDeviceCurrentFormat
59 4 0000D1A0 PaWasapi_GetDeviceDefaultFormat = PaWasapi_GetDeviceDefaultFormat
60 5 0000D270 PaWasapi_GetDeviceMixFormat = PaWasapi_GetDeviceMixFormat
61 6 0000D340 PaWasapi_GetDeviceRole = PaWasapi_GetDeviceRole
64 7 0000D3C0 PaWasapi_GetFramesPerHostBuffer = PaWasapi_GetFramesPerHostBuffer
65 8 0000D3F0 PaWasapi_GetJackCount = PaWasapi_GetJackCount
66 9 0000D5D0 PaWasapi_GetJackDescription = PaWasapi_GetJackDescription
67 A 0000DAA0 PaWasapi_SetDefaultInterfaceId = PaWasapi_SetDefaultInterfaceId
68 B 0000DAB0 PaWasapi_SetStreamStateHandler = PaWasapi_SetStreamStateHandler
62 C 0000DAD0 PaWasapi_ThreadPriorityBoost = PaWasapi_ThreadPriorityBoost
63 D 0000DB10 PaWasapi_ThreadPriorityRevert = PaWasapi_ThreadPriorityRevert
23 E 00003520 Pa_AbortStream = Pa_AbortStream
19 F 00003570 Pa_CloseStream = Pa_CloseStream
7 10 000035D0 Pa_GetDefaultHostApi = Pa_GetDefaultHostApi
13 11 00003600 Pa_GetDefaultInputDevice = Pa_GetDefaultInputDevice
14 12 00003630 Pa_GetDefaultOutputDevice = Pa_GetDefaultOutputDevice
12 13 00003660 Pa_GetDeviceCount = Pa_GetDeviceCount
15 14 00003680 Pa_GetDeviceInfo = Pa_GetDeviceInfo
3 15 000036C0 Pa_GetErrorText = Pa_GetErrorText
6 16 00003870 Pa_GetHostApiCount = Pa_GetHostApiCount
8 17 00003890 Pa_GetHostApiInfo = Pa_GetHostApiInfo
11 18 000038C0 Pa_GetLastHostErrorInfo = Pa_GetLastHostErrorInfo
33 19 000038D0 Pa_GetSampleSize = Pa_GetSampleSize
28 1A 00003950 Pa_GetStreamcpuLoad = Pa_GetStreamcpuLoad
26 1B 00003980 Pa_GetStreamInfo = Pa_GetStreamInfo
31 1C 000039B0 Pa_GetStreamReadAvailable = Pa_GetStreamReadAvailable
27 1D 000039E0 Pa_GetStreamTime = Pa_GetStreamTime
32 1E 00003A10 Pa_GetStreamWriteAvailable = Pa_GetStreamWriteAvailable
1 1F 00003A40 Pa_GetVersion = Pa_GetVersion
2 20 00003A60 Pa_GetVersionText = Pa_GetVersionText
10 21 00003A70 Pa_HostApiDeviceIndexToDeviceIndex = Pa_HostApiDeviceIndexToDeviceIndex
9 22 00003AC0 Pa_HostApiTypeIdToHostApiIndex = Pa_HostApiTypeIdToHostApiIndex
4 23 00003B10 Pa_Initialize = Pa_Initialize
16 24 00003B50 Pa_IsFormatSupported = Pa_IsFormatSupported
25 25 00003C80 Pa_IsstreamActive = Pa_IsstreamActive
24 26 00003CB0 Pa_IsstreamStopped = Pa_IsstreamStopped
18 27 00003CE0 Pa_OpenDefaultStream = Pa_OpenDefaultStream
17 28 00003DF0 Pa_OpenStream = Pa_OpenStream
29 29 00003FB0 Pa_ReadStream = Pa_ReadStream
20 2A 00004050 Pa_SetStreamFinishedCallback = Pa_SetStreamFinishedCallback
34 2B 0001C700 Pa_Sleep = Pa_Sleep
21 2C 000040A0 Pa_StartStream = Pa_StartStream
22 2D 000040F0 Pa_StopStream = Pa_StopStream
5 2E 00004140 Pa_Terminate = Pa_Terminate
30 2F 00004180 Pa_WriteStream = Pa_WriteStream
Summary
3000 .data
7000 .pdata
24000 .rdata
1000 .reloc
1000 .rsrc
6B000 .text
1000 _RDATA
Link.exe的详细输出
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe" /INCREMENTAL /NOlogo portaudio_x64.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG:FASTLINK /PDB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.pdb" /SUBSYstem:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.lib" /MACHINE:X64 x64\Debug\ConsoleApplication1.obj
1> Tracking command:
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Tracker.exe /a /d "C:\Program Files (x86)\MSBuild\15.0\FileTracker\FileTracker32.dll" /i C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleA.8f735e32.tlog /r C:\USERS\cp\SOURCE\GITHUB\PORTAUdio-LISTDEVICES-COMMAND\CONSOLEAPPLICATION1\X64\DEBUG\CONSOLEAPPLICATION1.OBJ /b MSBuildConsole_CancelEventca601256d110470b96dcd6bd48d0231f /c "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64\link.exe" /ERRORREPORT:PROMPT /OUT:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe" /INCREMENTAL /NOlogo portaudio_x64.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG:FASTLINK /PDB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.pdb" /SUBSYstem:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.lib" /MACHINE:X64 x64\Debug\ConsoleApplication1.obj
现已定义其他库路径
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe" /INCREMENTAL /NOlogo /LIBPATH:C:\Users\cp\source\github\portaudio\build\msvc\x64\Release /LIBPATH:C:\Users\cp\source\github\portaudio\build\msvc\x64\Release portaudio_x64.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG:FASTLINK /PDB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.pdb" /SUBSYstem:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.lib" /MACHINE:X64 x64\Debug\ConsoleApplication1.obj
1> Tracking command:
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Tracker.exe /a /d "C:\Program Files (x86)\MSBuild\15.0\FileTracker\FileTracker32.dll" /i C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleA.8f735e32.tlog /r C:\USERS\cp\SOURCE\GITHUB\PORTAUdio-LISTDEVICES-COMMAND\CONSOLEAPPLICATION1\X64\DEBUG\CONSOLEAPPLICATION1.OBJ /b MSBuildConsole_CancelEventa9f191895925491f926a123cade0b276 /c "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64\link.exe" /ERRORREPORT:PROMPT /OUT:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe" /INCREMENTAL /NOlogo /LIBPATH:C:\Users\cp\source\github\portaudio\build\msvc\x64\Release /LIBPATH:C:\Users\cp\source\github\portaudio\build\msvc\x64\Release portaudio_x64.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG:FASTLINK /PDB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.pdb" /SUBSYstem:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.lib" /MACHINE:X64 x64\Debug\ConsoleApplication1.obj
1> ConsoleApplication1.obj : error LNK2019: unresolved external symbol Pa_GetVersionInfo referenced in function main
1> C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe : Fatal error LNK1120: 1 unresolved externals
1> The command exited with code 1120.
1> Done executing task "Link" -- Failed.
1>Done building target "Link" in project "ConsoleApplication1.vcxproj" -- Failed.
1>
1>Done building project "ConsoleApplication1.vcxproj" -- Failed.
1>
1>Build Failed.
1>
1>ConsoleApplication1.obj : error LNK2019: unresolved external symbol Pa_GetVersionInfo referenced in function main
1>C:\Users\cp\source\github\portaudio-listdevices-command\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe : Fatal error LNK1120: 1 unresolved externals
1> 0 Warning(s)
1> 2 Error(s)
解决方法
所以我不能为此功劳。我只发布答案,所以我们可以关闭这个问题。 但是问题出在portaudio库本身 portinfo.def文件未导出我尝试调用的方法-示例文件中引用的方法。
解决方法是将以下行添加到portinfo.def文件:
Pa_GetVersionInfo @ 69
现在,我的客户端/控制台应用程序可以编译。 我将在今天晚些时候向portaudio存储库提交补丁,以供社区考虑。但是要感谢@HansPassant和πάνταῥεῖ
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。