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文件中的代码如下所示:

https://github.com/closetcodebrews/portaudio-listdevices-commandline/blob/main/ConsoleApplication1/ConsoleApplication1.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

enter image description here

enter image description here

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

现已定义其他库路径

enter image description here

最新链接错误

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和πάνταῥεῖ

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...