Ошибки «Неразрешенный внешний символ» - PullRequest
1 голос
/ 27 мая 2011

Я использую пример программы, которая должна позволять управлять MIDI-устройствами по протоколу OSC.

Я скачал 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

... Так что я послушно перемещаю include и определения из моего основного файла cpp сюда.

Я также заметил, что мне нужно добавить включения в мой проект, поэтому в проводнике Windows я копирую папки «osc» и «ip» в папку моего проекта.

При запуске я получаю следующие ошибки:

1> ------ Началась сборка: Проект: 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) * ​​1033 *

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) * ​​1035 *

1> osctemp.obj: ошибка LNK2028: неразрешенный токен (0A00000C) "public: void __thiscall UdpSocket :: Send (char const *, int)" (? Send @ UdpSocket @@ $$ FQAEXPBDH @ Z), на который есть ссылка в функции "int __cdecl main (int, char * * const)" (? main @@ $$ HYAHHQAPAD @ Z) * ​​1037 *

... (и еще много таких) ...

1> D: \ Temp \ OSCTEMP \ osctemp \ Debug \ osctemp.exe: фатальная ошибка LNK1120: 40 неразрешенных внешних проблем

Что я пропустил?

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Из описания вашей проблемы я не могу найти ничего о том, как вы ссылаетесь на библиотеки SDK.Вы сделали это?

Для связи с библиотеками SDK вам нужен один или несколько файлов .lib.Даже если SDK распространяется как DLL, вам нужен файл lib для компоновки во время сборки.Вам следует прочитать документацию по SDK и найти рекомендации по зависимостям ссылок.

Если вы не можете найти какие-либо lib-файлы в дистрибутиве SDK, вполне может быть, что вам сначала нужно собрать SDKсоздать библиотеку, а затем ссылку на нее.В качестве альтернативы, если SDK поставляется с готовым проектом VS, вы можете добавить его в свое решение и настроить свой собственный проект в зависимости от него (т. Е. VS выполняет работу по поиску выходного lib и связыванию с ним).Опять же, если SDK соответствует любому стандарту спуска, должны быть документы о создании SDK самостоятельно, если это необходимо.

Удачи.

0 голосов
/ 27 мая 2011

Вы либо не используете правильную библиотеку, либо ваш прототип неправильно определяет библиотечную функцию в соответствии с тем, что на самом деле в ней.

...