首页 文章

'Unresolved external symbol'错误

提问于
浏览
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并创建了一个名为“osctemp”的新(CLR控制台应用程序)项目 . 我从'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 build:项目:osctemp,配置:调试Win32 ------

1> stdafx.cpp

1> AssemblyInfo.cpp

1> osctemp.cpp

1>生成代码......

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

1> osctemp.obj:错误LNK2028:未解析的令牌(0A00000A)“public:char const * __thiscall osc :: OutboundPacketStream :: Data(void)const”(?Data @ OutboundPacketStream @ osc @@ $$ FQBEPBDXZ)在函数中引用“ int __cdecl main(int,char * * const)“(?main @@ $$ HYAHHQAPAD @ Z)

1> osctemp.obj:错误LNK2028:未解析的令牌(0A00000B)“public:unsigned int __thiscall osc :: OutboundPacketStream :: Size(void)const”(?size @ OutboundPacketStream @ osc @@ $$ FQBEIXZ)在函数“int”中引用__cdecl main(int,char * * const)“(?main @@ $$ HYAHHQAPAD @ Z)

1> osctemp.obj:错误LNK2028:未解析的令牌(0A00000C)“public __thiscall UdpSocket :: Send(char const *,int)”(?发送@ UdpSocket @@ $$ FQAEXPBDH @ Z)在函数“int __cdecl中引用main(int,char * * const)“(?main @@ $$ HYAHHQAPAD @ Z)

......(还有更像这样)......

1> D:\ Temp \ OSCTEMP \ osctemp \ Debug \ osctemp.exe:致命错误LNK1120:40个未解析的外部

我错过了什么?

2 回答

  • 0

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

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

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

    同样,如果SDK具有任何下降标准,那么应该有关于自己构建SDK的文档(如果有必要) .

    祝好运 .

  • 1

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

相关问题