对我的函数的未定义引用

卡索姆

我在构建我的项目部分时遇到了一些麻烦。这是:
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

实用程序.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;
}  

守护进程

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&)'  

我已经尝试用谷歌搜索解决方案,但我能找到的所有内容都是更改../build/utility.obuild/cdaemon.o顺序的建议那对我没有帮助。

迪特马尔·库尔

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

g ++说我对函数有未定义的引用

来自分类Dev

对定义的构造函数的“未定义引用”

来自分类Dev

对定义的构造函数的“未定义引用”

来自分类Dev

对已定义函数的未定义引用

来自分类Dev

未定义对函数调用的引用?

来自分类Dev

未定义对函数send的引用

来自分类Dev

未定义对swscale函数的引用

来自分类Dev

未定义对'gnutls _...'函数的引用

来自分类Dev

未定义对模板成员函数的引用

来自分类Dev

未定义对某些opencv函数的引用

来自分类Dev

未定义的函数错误引用

来自分类Dev

构造函数中的未定义引用

来自分类Dev

未定义对继承函数的引用

来自分类Dev

未定义对Aruco函数的引用

来自分类Dev

未定义对函数的引用?C ++

来自分类Dev

未定义对cusolverDn函数的引用

来自分类Dev

gcc对portaudio函数的未定义引用

来自分类Dev

C ++:对构造函数的未定义引用

来自分类Dev

未定义对静态函数的引用

来自分类Dev

在main()中未定义对函数的引用

来自分类Dev

未定义对函数c的引用

来自分类Dev

未定义对Makefile中的“函数”的引用

来自分类Dev

引用错误:函数未定义

来自分类Dev

未定义对自写函数的引用

来自分类Dev

未定义对espeak函数的引用

来自分类Dev

JsonBox函数的未定义引用

来自分类Dev

未定义的函数引用(C ++)

来自分类Dev

C ++:对void函数的未定义引用

来自分类Dev

对C ++中函数的未定义引用