C++头文件“x86_84体系结构的未定义符号”[重复]

xt0899hw  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(117)

此问题在此处已有答案

How to use visual studio code to compile multi-cpp file? [duplicate](4个答案)
3天前关闭。
我是C++的新手,我正在尝试更好地组织我的代码,通过将方法和变量移到头文件中,这样它们就可以在.cpp文件中更好地共享。所以现在,我只是在尝试学习如何最好地使用头文件,但我似乎无法制作即使是最简单的程序。
现在,我有两个.cpp文件和一个.h文件:

file1.cpp
file2.cpp
header.h

我要做的就是从file1.cpp内部的main()调用一个在file2.cpp中定义的函数。
file1.cpp:

#include <iostream>
#include "header.h"
using namespace std;

void Log(const char* message) {
    cout << message << endl;
}

int main() {
    InitLog();
    Log("Hello World!");
}

file2.cpp:

#include <iostream>
#include "header.h"
using namespace std;

void InitLog()
{
    Log("Initializing Log");
}

标题.h:

#pragma once

void InitLog();

void Log(const char* message);

我运行在VScode上,每次运行file1.cpp时,我都会收到这个错误:

Undefined symbols for architecture x86_64:
  "InitLog()", referenced from:
      _main in file1-27a581.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

不管出于什么原因,我似乎无法让file1查看file2中的函数定义。
我的头文件中还需要包含什么吗?我需要按照一定的顺序编译吗?请帮助!

kd3sttzy

kd3sttzy1#

显示的代码没有问题,代码正常。
问题出在链接器上。您需要编译 * file1.cpp * 和 * file2.cpp,然后将生成的目标文件 link 到最终的.exe中。您看到的错误来自链接器,而不是编译器。链接器抱怨它找不到InitLog()的实现代码,file1.cpp正在调用该代码。这意味着您没有“链接”到编译file2.cpp生成的目标文件。
您说您正在“运行file1.cpp“,但这本身还不够好,C++也不是这样工作的。

相关问题