gpt4 book ai didi

c++ - 未定义的引用问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:42 24 4
gpt4 key购买 nike

我在 C++ 中遇到这个错误,我真的不知道如何找到它的底部:

g++ proxy.cpp -lboost_thread -lboost_filesystem -lboost_system

/tmp/ccUHa2s3.o: In function `main': proxy.cpp:(.text+0x1d8): undefined reference to `server::server(std::deque<boost::shared_ptr<boost::asio::io_service>, std::allocator<boost::shared_ptr<boost::asio::io_service> > > const&, int)' collect2: ld returned 1 exit status

我有以下源代码(我复制了 http://alexott.net/common/asio-proxy-async/proxy-conn.cpp.html ):

//proxy.cpp:
#include "proxy-server.hpp"

int main(int argc, char** argv) {
try {
int thread_num=2;
if(argc > 1)
thread_num=boost::lexical_cast<int>(argv[1]);
ios_deque io_services;
std::deque<ba::io_service::work> io_service_work;

boost::thread_group thr_grp;

for (int i = 0; i < thread_num; ++i) {
io_service_ptr ios(new ba::io_service);
io_services.push_back(ios);
io_service_work.push_back(ba::io_service::work(*ios));
thr_grp.create_thread(boost::bind(&ba::io_service::run, ios));
}
server server(io_services); //apparently there's some error here?
thr_grp.join_all();
} catch (std::exception& e) {
std::cerr << e.what() << std::endl;
}


return 0;
}



//proxy-server.hpp:
#ifndef _PROXY_SERVER_H
#define _PROXY_SERVER_H 1

#include "common.h"
#include "proxy-conn.hpp"

#include <deque>

typedef std::deque<io_service_ptr> ios_deque;

class server {
public:
server(const ios_deque& io_services, int port=10001);

private:
void start_accept();
void handle_accept(connection::pointer new_connection, const bs::error_code& error);

ios_deque io_services_;
ba::ip::tcp::acceptor acceptor_;
};


#endif /* _PROXY-SERVER_H */


//proxy-server.cpp:
#include "proxy-server.hpp"

server::server(const ios_deque& io_services, int port)
: io_services_(io_services),
acceptor_(*io_services.front(), ba::ip::tcp::endpoint(ba::ip::tcp::v4(), port)) {
start_accept();
}

void server::start_accept() {
// Round robin.
io_services_.push_back(io_services_.front());
io_services_.pop_front();
connection::pointer new_connection = connection::create(*io_services_.front());

acceptor_.async_accept(new_connection->socket(),
boost::bind(&server::handle_accept, this, new_connection,
ba::placeholders::error));
}

void server::handle_accept(connection::pointer new_connection, const bs::error_code& error) {
if (!error) {
new_connection->start();
start_accept();
}
}

有人可以指出正确的方向来解决这个错误吗?


编辑

我现在收到以下错误:

g++ proxy.cpp proxy-server.cpp -lboost_thread -lboost_filesystem -lboost_system

/tmp/ccl3DHn7.o: In function `server::handle_accept(boost::shared_ptr<connection>, boost::system::error_code const&)': proxy-server.cpp:(.text+0x250): undefined reference to `connection::start()' /tmp/ccl3DHn7.o: In function `connection::create(boost::asio::io_service&)': proxy-server.cpp:(.text._ZN10connection6createERN5boost4asio10io_serviceE[connection::create(boost::asio::io_service&)]+0x29): undefined reference to `connection::connection(boost::asio::io_service&)' collect2: ld returned 1 exit status`

最佳答案

这意味着它找不到server 构造函数的实现。你有没有写过上面没有显示的?

编辑: 好的,您已经编写了一个,但没有将其传递给编译器。您需要在 g++ 行中包含 proxy-server.cpp

编辑 2: 仅编译包含 main 的文件并包含头文件是不够的。您需要将所有的 cpp 文件提供给 g++,否则它将无法链接您的程序。

g++ proxy.cpp proxy-server.cpp proxy-conn.cpp -lboost_thread -lboost_filesystem -lboost_system

关于c++ - 未定义的引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7119227/

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