【问题标题】:LNK2019, boost::asioLNK2019, 提升::asio
【发布时间】:2013-01-22 05:40:59
【问题描述】:

在 Visual Studio 2010 中,我得到了

错误 1 ​​错误 LNK2019: 无法解析的外部符号 "public: __thiscall 服务器::服务器(类 boost::asio::io_service &)" (??0Server@@QAE@AAVIo_service@asio@boost@@@Z) 在 函数 _main C:\Users\Lucie\Documents\Visual Studio 2010\项目\实验服务器\实验 Serveur\Main_Serveur.obj

但是,我的头文件中的类定义和 .cpp 文件中的类实现都包含在解决方案中,所以我真的不明白为什么会这样。此外,我检查了,定义和声明似乎匹配。

这里是 Main_Serveur.cpp:

include <ctime>
#include <iostream>
#include <string>
#include <vector>
#include <hash_map>
#include <functional>
#include <boost/bind.hpp>
#include <algorithm>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/asio.hpp>
#include <hash_set>

#include "Connection.h"
#include "Server.h"

using boost::asio::ip::tcp;
int main()
{
    try
    {
        boost::asio::io_service io_service;
        Server server(io_service);
        io_service.run();
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
    std::cin.get();
    return 0;
}

这里是 Server.h:

#ifndef __SERVER_H__
#define __SERVER_H__
#include"Connection.h"
#include<boost\bind.hpp>
#include<boost\asio.hpp>
#include<boost\shared_ptr.hpp>
#include<boost\enable_shared_from_this.hpp>
#include<hash_set>
#include<string>
using boost::asio::ip::tcp;

class Connection;
class Server : public boost::enable_shared_from_this<Server>
{
public:
    Server(boost::asio::io_service & io_service);
    void removeSocketFromList(tcp::socket * socketToRemove);
    void sendToList(std::string message);
    void addSocketToList(tcp::socket * newSocket);

private:
    void start_accept();
    void handle_accept
    (
        boost::shared_ptr<Connection> new_connection,
        const boost::system::error_code& error
    );


    std::hash_set<tcp::socket*> sockets_;
    tcp::acceptor acceptor_;
};
#endif

这里是Server.cpp的相关部分:

#include"Server.h"
#include"Connection.h"

#include<boost\asio.hpp>
#include<hash_set>
using boost::asio::ip::tcp;

Server::Server(boost::asio::io_service & io_service):
acceptor_(io_service, tcp::endpoint(tcp::v4(), 13))
{
    start_accept();
}

任何帮助将不胜感激。

【问题讨论】:

  • boost::asio 是必须实际构建的(少数)Boost 库之一。它不仅仅是标题——你必须构建你需要的组件并配置 Visual Studio 以便它可以找到位。
  • 尝试遵循 Boost 入门指南的第 5 部分:boost.org/doc/libs/1_52_0/more/getting_started/…
  • boost::asio 已编译并在一段时间内正常工作。我不相信 boost::asio 是问题的原因。该软件在一段时间内运行良好,直到结构的新添加使其停止工作。不过,我看不出这些新增内容有何相关性。它们主要涉及将组织套接字指针添加到哈希集中 - 与链接器几乎不相关。

标签: c++ c visual-c++ boost boost-asio


【解决方案1】:

最终创建了一个新项目并包含源代码和标头,并编译了项目。 那好吧。

【讨论】:

    【解决方案2】:

    一定是因为你不会编译Server.cpp。相反,您只编译了 Main_server.cpp 文件。这次链接器没有看到 Server.obj 并且会弹出链接错误,就像您得到的一样(未定义的复制构造函数)。您可以创建项目将所有文件添加到其中(就像您所做的那样),或者编译 cpp 文件,这些文件要单独编译以生成其 obj。此外,您可以使用 makefile,这比其他两个选项更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2016-05-02
      相关资源
      最近更新 更多