我有两个.cpp文件,main.cpp和secondFile.cpp:
#include <iostream>
int main()
{
std::cout << "Hello, World!\n" << std::endl;
std::cout << "I was also able to add this line!" << std::endl;
return 0;
}
和
#include <iostream>
int main()
{
std::cout << "This was from the second file!" << std::endl;
return 0;
}
我已经成功运行了
g++ -o main.cpp main
和g++ -o secondFile.cpp secondFile
,并且运行了它们各自的可执行文件。但是,当我尝试将它们同时编译为单个可执行文件g++ -o main.cpp secondFile.cpp bothScripts
或clang++ main.cpp secondFile.cpp -o bothScripts
时,出现以下错误:“重复的符号_main位于:
/var/folders/49/38grlkzs44zcth3v_dw9m9dm0000gn/T/main-d43536.o
/var/folders/49/38grlkzs44zcth3v_dw9m9dm0000gn/T/secondfile-2bee63.o
ld:体系结构x86_64的1个重复符号
铛:错误:链接器命令失败,退出代码为1(使用-v查看调用)”
显然,某些东西被加载了两次,但是我不确定这是一个库(iostream),我已经将这两个部分都命名为“main”还是其他东西。当然已经有与此类似的问题,但是许多问题是令人费解的,而不是新的C++成员所必需的(因此在这里提出我的问题)。
上下文:我的基本原理是练习从多个.cpp文件构建可执行文件。有没有更好的方法来解决这个问题? (对于C++来说是新手,但总体上对编程/代码不是。)
最佳答案
错误的原因很简单。您有2个main()
函数。如您所知,在C++程序中,函数main()
通常定义程序的入口点。当每个文件一起编译并具有自己的main()
函数时,编译器会感到困惑并抛出错误。要解决此问题,如果计划一起运行,只需在一个文件中更改main()
函数的名称,然后从另一个文件中调用它即可。
关于c++ - 尝试在终端(MacOSX)中编译两个.cpp文件(来自XCode)时的“Duplicate symbol”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42535792/