gpt4 book ai didi

c++ - 对 B::B & B::~B 的 undefined reference

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:21 25 4
gpt4 key购买 nike

我不断收到 g++ 编译器的投诉,说下面的代码有问题。仔细检查后,我还是想不通为什么从embedMain.cpp中找不到B类的构造函数和析构函数。

谁能给我一点提示?

谢谢

// embedMain.cpp
#include "embed.h"

int main(void)
{
B b("hello world");
return 0;
}

,

// embed.h
#ifndef EMBED_H
#define EMBED_H
#include <string>

class B
{
public:
B(const std::string& _name);
~B();
private:
std::string name;
};
#endif

,

// embed.cpp

#include <iostream>
#include <string>
#include "embed.h"

B::B(const std::string& _name) : name(_name) {}

B::~B() {
std::cout << "This is B::~B()" << std::endl;
}

,

~/Documents/C++ $ g++ --version
g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

~/Documents/C++ $ g++ -o embedMain embedMain.cpp
/tmp/ccdqT9tn.o: In function `main':
embedMain.cpp:(.text+0x42): undefined reference to `B::B(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
embedMain.cpp:(.text+0x6b): undefined reference to `B::~B()'
embedMain.cpp:(.text+0x93): undefined reference to `B::~B()'
collect2: ld returned 1 exit status

//已更新//

根据此处专家的评论,我找到了将 embedMain.cpp 与嵌入库链接的正确方法。

详细步骤如下:

user@ubuntu:~/Documents/C++$ tree
.
├── embed.cpp
├── embed.h
├── embedMain.cpp

user@ubuntu:~/Documents/C++$ g++ -Wall -c embed.cpp
user@ubuntu:~/Documents/C++$ ar -cvq libembed.a embed.o
user@ubuntu:~/Documents/C++$ g++ -o embedMain embedMain.cpp -L/home/user/Documents/C++ -lembed
user@ubuntu:~/Documents/C++$ tree
.
├── embed.cpp
├── embed.h
├── embedMain
├── embedMain.cpp
├── embed.o
├── libembed.a

最佳答案

您需要编译 embed.cpp 并将其链接到您的可执行文件中,如下所示:

g++ -o embedMain embedMain.cpp embed.cpp

这会编译文件并链接所有内容。将三个步骤分开:

g++ -c embed.cpp
g++ -c embedMain.cpp
g++ -o embedMain embedMain.o embed.o

关于c++ - 对 B::B & B::~B 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8328728/

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