gpt4 book ai didi

c++ - Eclipse项目中的OSCPack外部库测试用例

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:50 25 4
gpt4 key购买 nike

有人可以向我解释如何在基于 Eclipse 工作区的项目中使用 oscpack 库吗?我已经使用 make 创建了目标文件,将 ip 和 osc 目录添加到我的项目树中,并将这些目录添加到项目设置>C/C++ 构建>设置>GCC C++ 编译器>包含中的包含路径列表中。

我无法让它在 Eclipse 或 g++ 命令行编译器中运行。我的想法不多了。

代码是 oscpack 站点 btw 中的 SimpleReceive.cpp。

/* 
Example of two different ways to process received OSC messages using oscpack.
Receives the messages from the SimpleSend.cpp example.
*/

#include <iostream>

#include "osc/OscReceivedElements.h"
#include "osc/OscPacketListener.h"
#include "ip/UdpSocket.h"


#define PORT 7000

class ExamplePacketListener : public osc::OscPacketListener {
protected:

virtual void ProcessMessage( const osc::ReceivedMessage& m,
const IpEndpointName& remoteEndpoint )
{
try{
// example of parsing single messages. osc::OsckPacketListener
// handles the bundle traversal.

if( strcmp( m.AddressPattern(), "/test1" ) == 0 ){
// example #1 -- argument stream interface
osc::ReceivedMessageArgumentStream args = m.ArgumentStream();
bool a1;
osc::int32 a2;
float a3;
const char *a4;
args >> a1 >> a2 >> a3 >> a4 >> osc::EndMessage;

std::cout << "received '/test1' message with arguments: "
<< a1 << " " << a2 << " " << a3 << " " << a4 << "\n";

}else if( strcmp( m.AddressPattern(), "/test2" ) == 0 ){
// example #2 -- argument iterator interface, supports
// reflection for overloaded messages (eg you can call
// (*arg)->IsBool() to check if a bool was passed etc).
osc::ReceivedMessage::const_iterator arg = m.ArgumentsBegin();
bool a1 = (arg++)->AsBool();
int a2 = (arg++)->AsInt32();
float a3 = (arg++)->AsFloat();
const char *a4 = (arg++)->AsString();
if( arg != m.ArgumentsEnd() )
throw osc::ExcessArgumentException();

std::cout << "received '/test2' message with arguments: "
<< a1 << " " << a2 << " " << a3 << " " << a4 << "\n";
}
}catch( osc::Exception& e ){
// any parsing errors such as unexpected argument types, or
// missing arguments get thrown as exceptions.
std::cout << "error while parsing message: "
<< m.AddressPattern() << ": " << e.what() << "\n";
}
}
};

int main(int argc, char* argv[])
{
ExamplePacketListener listener;
UdpListeningReceiveSocket s(
IpEndpointName( IpEndpointName::ANY_ADDRESS, PORT ),
&listener );

std::cout << "press ctrl-c to end\n";

s.RunUntilSigInt();

return 0;
}

控制台输出:

15:38:50 **** Incremental Build of configuration Debug for project NoteMaker_v2 ****
make all
Building target: NoteMaker_v2
Invoking: MacOS X C++ Linker
g++ -o "NoteMaker_v2" ./src/CommonFunctions.o ./src/DummyGen.o ./src/FileInterpreter.o ./src/GenAdmin.o ./src/Generator.o ./src/MusicalFunctions.o ./src/NoteBlock.o ./src/NoteMaker_v2.o ./src/NoteStack.o ./src/Serialism.o
Undefined symbols for architecture x86_64:
"osc::EndMessage", referenced from:
ExamplePacketListener::ProcessMessage(osc::ReceivedMessage const&, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedBundle::ReceivedBundle(osc::ReceivedPacket const&)", referenced from:
osc::OscPacketListener::ProcessPacket(char const*, int, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedBundle::ReceivedBundle(osc::ReceivedBundleElement const&)", referenced from:
osc::OscPacketListener::ProcessBundle(osc::ReceivedBundle const&, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedMessage::ReceivedMessage(osc::ReceivedPacket const&)", referenced from:
osc::OscPacketListener::ProcessPacket(char const*, int, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedMessage::ReceivedMessage(osc::ReceivedBundleElement const&)", referenced from:
osc::OscPacketListener::ProcessBundle(osc::ReceivedBundle const&, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedMessageArgumentIterator::Advance()", referenced from:
osc::ReceivedMessageArgumentIterator::operator++(int) in NoteMaker_v2.o
"osc::ReceivedPacket::IsBundle() const", referenced from:
osc::OscPacketListener::ProcessPacket(char const*, int, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedBundleElement::Size() const", referenced from:
osc::ReceivedBundleElementIterator::Advance() in NoteMaker_v2.o
"osc::ReceivedBundleElement::IsBundle() const", referenced from:
osc::OscPacketListener::ProcessBundle(osc::ReceivedBundle const&, IpEndpointName const&) in NoteMaker_v2.o
"osc::ReceivedMessageArgument::AsBool() const", referenced from:
ExamplePacketListener::ProcessMessage(osc::ReceivedMessage const&, IpEndpointName const&) in NoteMaker_v2.o
osc::ReceivedMessageArgumentStream::operator>>(bool&) in NoteMaker_v2.o
"osc::ReceivedMessageArgument::AsFloat() const", referenced from:
ExamplePacketListener::ProcessMessage(osc::ReceivedMessage const&, IpEndpointName const&) in NoteMaker_v2.o
osc::ReceivedMessageArgumentStream::operator>>(float&) in NoteMaker_v2.o
"osc::ReceivedMessageArgument::AsInt32() const", referenced from:
ExamplePacketListener::ProcessMessage(osc::ReceivedMessage const&, IpEndpointName const&) in NoteMaker_v2.o
osc::ReceivedMessageArgumentStream::operator>>(int&) in NoteMaker_v2.o
"osc::ReceivedMessageArgument::AsString() const", referenced from:
ExamplePacketListener::ProcessMessage(osc::ReceivedMessage const&, IpEndpointName const&) in NoteMaker_v2.o
osc::ReceivedMessageArgumentStream::operator>>(char const*&) in NoteMaker_v2.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [NoteMaker_v2] Error 1

15:38:50 Build Finished (took 279ms)

最佳答案

因此您需要配置路径和编译器/链接器选项。

在我的 ubuntu 盒子上,在 apt-get install liboscpack-dev 之后它使用以下选项编译得很好:

g++ -Wall -pedantic -g -O0 -I /usr/include/oscpack test.cpp -o test -loscpack

在您的盒子上,您可能还需要添加库的路径,例如

-L /usr/local/lib/oscpack

(我确实添加了缺少的 #include <cstring>)

关于c++ - Eclipse项目中的OSCPack外部库测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com