gpt4 book ai didi

c++ - 未定义对我的函数的引用

转载 作者:行者123 更新时间:2023-11-30 03:33:34 26 4
gpt4 key购买 nike

我在构建项目的这一部分时遇到了一些问题。在这里:
utility.h:

#ifndef UTILITY_H
#define UTILITY_H

#include <boost/array.hpp>
#include <boost/shared_ptr.hpp>
#include <fstream>
#include <iostream>
#include <openssl/md5.h>
#include <string>

namespace utility {
typedef boost::array<unsigned char, MD5_DIGEST_LENGTH> md5sum;
typedef boost::shared_ptr<md5sum> md5sum_ptr;

...

md5sum_ptr calculate_md5(const std::string& full_path);
};

#endif //UTILITY_H

utility.cpp:

#include "utility.h"

using namespace utility;

...

md5sum_ptr calculate_md5(const std::string& full_path) {
md5sum_ptr md5(new md5sum);
std::ifstream in(full_path);
std::string content;
in >> content;
MD5((unsigned char*)content.data(), content.size(), md5->data());
return md5;
}

cdaemon.cpp

void CTCPConnection::handle_read_filename(ECommand command, EDataType datatype,
const boost::system::error_code& ec) {
...
case ECommand::GET_MD5:
_send_container<md5sum>(*(calculate_md5(filename)));
async_write(m_socket, m_writebuf,
boost::bind(&CTCPConnection::handle_write_response, shared_from_this(),
placeholders::error));
break;
...
}
}

生成文件:

CC=g++
override CFLAGS+=-c -std=c++11 -Wall -Wextra -Werror
override LFLAGS+=-lboost_log -lpthread -lboost_system -lboost_thread -lcrypto

server: servermain.o cdaemon.o
$(CC) ../build/datatype.o ../build/utility.o build/servermain.o build/cdaemon.o -o build/frtpdaemon $(LFLAGS)
servermain.o: main.cpp
$(CC) $(CFLAGS) main.cpp -o build/servermain.o
cdaemon.o: cdaemon.cpp
$(CC) $(CFLAGS) -DBOOST_LOG_DYN_LINK cdaemon.cpp -o build/cdaemon.o

当我尝试构建服务器时,出现链接器错误:

build/cdaemon.o: In function `CTCPConnection::handle_read_filename(utility::ECommand, utility::EDataType, boost::system::error_code const&)':
cdaemon.cpp:(.text+0x127c): undefined reference to `utility::calculate_md5(std::string const&)'

我已经尝试用 google 搜索解决方案,但我所能找到的只是更改 ../build/utility.obuild/cdaemon.o< 顺序的建议/em>。这对我没有帮助。

最佳答案

您没有定义您在 header 中声明的函数。在命名空间中定义函数时,using 指令是不够的。您需要在定义函数之前打开命名空间,或者使用命名空间限定函数,例如:

utility::md5sum_ptr utility::calculate_md5(const std::string& full_path) {
...
}

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

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