C++ MsgPack:链接器错误

问题描述 投票:0回答:1

我正在尝试编译消息包(http://msgpack.org/)示例代码并不断收到这些错误,但我无法弄清楚:

g++  -o"MsgPack2"  ./src/MsgPack2.o   -lmsgpack -lmsgpackc

>     ./src/MsgPack2.o: In function `main':
>     /mnt/eoh/workspace/MsgPack2/Debug/../src/MsgPack2.cpp:38:
> undefined reference to `msgpack::rpc::server::listen(std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&, unsigned
> short)'
>     ./src/MsgPack2.o: In function `loop':
>     /usr/local/include/msgpack/rpc/loop.h:30: undefined reference to
> `mp::wavy::loop::loop()'
>     ./src/MsgPack2.o: In function `base':
>     /usr/local/include/msgpack/rpc/server.h:59: undefined reference to
> `msgpack::rpc::server::server(msgpack::rpc::loop)'
>     /usr/local/include/msgpack/rpc/server.h:59: undefined reference to
> `msgpack::rpc::server::serve(msgpack::rpc::dispatcher*)'
>     /usr/local/include/msgpack/rpc/server.h:59: undefined reference to
> `msgpack::rpc::server::~server()'
>     ./src/MsgPack2.o: In function `~base':
>     /usr/local/include/msgpack/rpc/server.h:64: undefined reference to
> `msgpack::rpc::server::~server()'
>     ./src/MsgPack2.o: In function
> `myserver::dispatch(msgpack::rpc::request)':
>     /mnt/eoh/workspace/MsgPack2/Debug/../src/MsgPack2.cpp:14:
> undefined reference to `msgpack::rpc::request::method()'
>     /mnt/eoh/workspace/MsgPack2/Debug/../src/MsgPack2.cpp:18:
> undefined reference to `msgpack::rpc::request::params()'
>     ./src/MsgPack2.o: In function
> `msgpack::rpc::loop_util<msgpack::rpc::session_pool>::run(unsigned
> long)':
>     /usr/local/include/msgpack/rpc/loop_util.h:34: undefined reference
> to `msgpack::rpc::session_pool::get_loop()'
>     /usr/local/include/msgpack/rpc/loop_util.h:34: undefined reference
> to `mp::wavy::loop::run(unsigned long)'
>     ./src/MsgPack2.o: In function `void
> msgpack::rpc::request::call<int, msgpack::type::nil>(int&,
> msgpack::type::nil&)':
>     /usr/local/include/msgpack/rpc/request.h:119: undefined reference
> to `msgpack::rpc::request::is_sent() const'
>     /usr/local/include/msgpack/rpc/request.h:122: undefined reference
> to `msgpack::rpc::request::get_msgid() const'
>     /usr/local/include/msgpack/rpc/request.h:125: undefined reference
> to `msgpack::rpc::request::send_data(msgpack::sbuffer*)'
>     ./src/MsgPack2.o: In function `void
> msgpack::rpc::request::call<msgpack::type::nil, unsigned
> char>(msgpack::type::nil&, unsigned char&)':
>     /usr/local/include/msgpack/rpc/request.h:119: undefined reference
> to `msgpack::rpc::request::is_sent() const'
>     /usr/local/include/msgpack/rpc/request.h:122: undefined reference
> to `msgpack::rpc::request::get_msgid() const'
>     /usr/local/include/msgpack/rpc/request.h:125: undefined reference
> to `msgpack::rpc::request::send_data(msgpack::sbuffer*)'
>     ./src/MsgPack2.o: In function `void
> msgpack::rpc::request::call<msgpack::type::nil,
> std::basic_string<char, std::char_traits<char>, std::allocator<char> >
> >(msgpack::type::nil&, std::basic_string<char, std::char_traits<char>,
> std::allocator<char> >&)':
>     /usr/local/include/msgpack/rpc/request.h:119: undefined reference
> to `msgpack::rpc::request::is_sent() const'
>     /usr/local/include/msgpack/rpc/request.h:122: undefined reference
> to `msgpack::rpc::request::get_msgid() const'
>     /usr/local/include/msgpack/rpc/request.h:125: undefined reference
> to `msgpack::rpc::request::send_data(msgpack::sbuffer*)'
>     ./src/MsgPack2.o: In function `__shared_count<mp::wavy::loop*>':
>     /usr/include/c++/4.5/tr1/shared_ptr.h:121: undefined reference to
> `mp::wavy::loop::~loop()'
>     ./src/MsgPack2.o: In function
> `std::tr1::_Sp_deleter<mp::wavy::loop>::operator()(mp::wavy::loop*)
> const':
>     /usr/include/c++/4.5/tr1/shared_ptr.h:99: undefined reference to
> `mp::wavy::loop::~loop()'
>     collect2: ld returned 1 exit status
>     make: *** [MsgPack2] Error 1

这是代码:

#include <msgpack/rpc/server.h>

class myserver : public msgpack::rpc::server::base {
public:
    void add(msgpack::rpc::request req, int a1, int a2)
    {
            req.result(a1 + a2);
    }

public:
    void dispatch(msgpack::rpc::request req)
    try {
            std::string method;
            req.method().convert(&method);

            if(method == "add") {
                    msgpack::type::tuple<int, int> params;
                    req.params().convert(&params);
                    add(req, params.get<0>(), params.get<1>());

            } else {
                    req.error(msgpack::rpc::NO_METHOD_ERROR);
            }

    } catch (msgpack::type_error& e) {
            req.error(msgpack::rpc::ARGUMENT_ERROR);
            return;

    } catch (std::exception& e) {
            req.error(std::string(e.what()));
            return;
    }
};

int main(void)
{
    myserver svr;
    svr.instance.listen("127.0.0.1", 80800);
    svr.instance.run(4);  // run 4 threads

    return 0;
}

如果有人有任何想法,我们将不胜感激。

提前非常感谢,

c++ linker msgpack
1个回答
4
投票

你需要

-lmsgpack-rpc

[旁注:

80800
不是有效端口。]

© www.soinside.com 2019 - 2024. All rights reserved.