【发布时间】:2014-03-05 14:26:06
【问题描述】:
有人可以向我解释如何在基于 Eclipse 工作区的项目中使用 oscpack 库吗?我已经使用 make 创建了目标文件,将 ip 和 osc 目录添加到我的项目树中,并将这些目录添加到项目设置>C/C++ Build>Settings>GCC C++ Compiler>Includes 中的包含路径列表中。
我无法让它在 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)
【问题讨论】:
-
我们没有发现问题。我们相信您已经完成了与包含路径相关的各种好事。但是……怎么回事?如果您不发布任何症状,我们怎么能闻到问题所在?
-
抱歉,说到这里:
-
使用控制台输出更新帖子
-
好吧,这是我正在尝试实施的实际项目的输出,但这几乎是问题所在。
-
所以,这是一个链接器错误。您是否将库包含在链接器选项中? -losc 或 -loscpack 或类似,我希望