1

我正在使用一个示例程序,它应该允许使用称为 OSC 的协议控制 MIDI 设备。

我所做的是从这里下载 SDK:http: //mac.softpedia.com/get/Development/Libraries/oscpack.shtml

“examples”文件夹包含一个名为“SimpleSend.cpp”的文件。代码如下:

#include "osc/OscOutboundPacketStream.h"
#include "ip/UdpSocket.h"


#define ADDRESS "127.0.0.1"
#define PORT 7000

#define OUTPUT_BUFFER_SIZE 1024

int main(int argc, char* argv[])
{
    UdpTransmitSocket transmitSocket( IpEndpointName( ADDRESS, PORT ) );

    char buffer[OUTPUT_BUFFER_SIZE];
    osc::OutboundPacketStream p( buffer, OUTPUT_BUFFER_SIZE );

    p << osc::BeginBundleImmediate
        << osc::BeginMessage( "/test1" ) 
        << true << 23 << (float)3.1415 << "hello" << osc::EndMessage
        << osc::BeginMessage( "/test2" ) 
        << true << 24 << (float)10.8 << "world" << osc::EndMessage
        << osc::EndBundle;

    transmitSocket.Send( p.Data(), p.Size() );
}

我打开了 Visual C++ 并创建了一个新的(CLR 控制台应用程序)项目,名为“osctemp”。我从“SimpleSend.cpp”文件中复制代码并将其粘贴到为我的项目创建的主 cpp 文件中,保留默认项目文件中的以下代码行:

#include "stdafx.h"

using namespace System;

然后我导航到 stdafx.h 头文件,并注意到它在底部包含以下行:

// TODO: reference additional headers your program requires here

...所以我乖乖地将包含和定义从我的主 cpp 文件移到这里。

我还注意到我需要将包含添加到我的项目中,因此在 Windows 资源管理器中,我将文件夹“osc”和“ip”复制到我的项目文件夹中。

运行时,我收到以下错误:

1>------ Build started: Project: osctemp, Configuration: Debug Win32 ------

1>  stdafx.cpp

1>  AssemblyInfo.cpp

1>  osctemp.cpp

1>  Generating Code...

1>  .NETFramework,Version=v4.0.AssemblyAttributes.cpp

1>osctemp.obj : error LNK2028: unresolved token (0A00000A) "public: char const * __thiscall osc::OutboundPacketStream::Data(void)const " (?Data@OutboundPacketStream@osc@@$$FQBEPBDXZ) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)

1>osctemp.obj : error LNK2028: unresolved token (0A00000B) "public: unsigned int __thiscall osc::OutboundPacketStream::Size(void)const " (?Size@OutboundPacketStream@osc@@$$FQBEIXZ) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)

1>osctemp.obj : error LNK2028: unresolved token (0A00000C) "public: void __thiscall UdpSocket::Send(char const *,int)" (?Send@UdpSocket@@$$FQAEXPBDH@Z) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)

...(And many more like this)...

1>D:\Temp\OSCTEMP\osctemp\Debug\osctemp.exe : fatal error LNK1120: 40 unresolved externals

我错过了什么?

4

2 回答 2

1

从您的问题描述中,我找不到有关您如何链接到 SDK 库的任何信息。你这样做了吗?

要与 SDK 库链接,您需要一个或多个 .lib 文件。即使 SDK 作为 DLL 分发,您也需要一个 lib 文件来进行构建时链接。您应该通读 SDK 文档并查找有关链接依赖项的指南。

如果您似乎在 SDK 发行版中找不到任何 lib 文件,很可能是您需要首先构建 SDK 以生成一个库,然后链接到它。或者,如果 SDK 带有一个现成的 VS 项目,您可以将其添加到您的解决方案中并设置您自己的项目以依赖它(即 VS 完成查找输出库并与之链接的工作)。

同样,如果 SDK 符合任何血统标准,如果有必要,应该有关于自己构建 SDK 的文档。

祝你好运。

于 2011-05-27T14:40:54.430 回答
0

您要么没有引入正确的库,要么您的原型没有根据其中的实际内容正确定义库函数。

于 2011-05-27T14:40:08.360 回答