如何通过终端Mac编译C++程序
How to compile a C++ program via Terminal Mac
我有一个关于如何在Terminal Mac中编译C++程序的问题。我的程序有一个头文件和一个主文件。我知道我不能同时编译头文件和主文件。只是为了编译主文件。我还知道我需要创建一个名称来存储编译后的文件。这是我使用g++ -o execute1 main.cpp
的编译命令,我得到的是:
Undefined symbols for architecture x86_64:
"add(int, int)", referenced from:
_main in main-f2nZvj.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我该怎么解决这个问题?任何帮助都将不胜感激。如果有帮助的话,下面是我对这两个文件的代码:
add.h:
int add(int x, int y);
main.cpp:
#include <iostream>
#include "add.h"
int main(){
using namespace std;
cout << "The sum of 9 and 9 is " << add(9, 9) << endl;
return 0;
}
您需要一个实现add()
函数的add.cpp
文件,然后您可以将整个文件编译为:
$ g++ -Wall main.cpp add.cpp -o execute1
此行:
int add(int x, int y);
在add.h
中,只需告诉编译器某个地方有一个名为add
的函数,它接受两个整数并返回一个整数。当您在#include "add.h"
的文件中使用此add
函数时,单独使用this和this将使编译器不必理会您。编译器不必确切地知道函数的作用,只需要知道它接受什么参数以及函数返回什么。直到它真正开始编译函数,它才开始查找函数体。
为了使其正确编译,您需要在add.cpp
中包含add
函数的函数体。即使只是这样也能奏效:
int add(int x, int y) {
return 1;
}
这将允许程序进行编译,因为现在编译器知道在调用main
中的add
函数时应该执行什么代码。
这至少可以作为占位符使用,直到您准备好实际编写您希望此函数包含的确切逻辑为止。但是,在这个函数体存在之前,您将无法编译(除非您删除对该函数的所有其他引用)。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址