c++ - 尝试在终端(MacOSX)中编译两个.cpp文件(来自XCode)时的“Duplicate symbol”

标签 c++ xcode macos compiler-errors g++

我有两个.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 maing++ -o secondFile.cpp secondFile,并且运行了它们各自的可执行文件。但是,当我尝试将它们同时编译为单个可执行文件g++ -o main.cpp secondFile.cpp bothScriptsclang++ 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/

相关文章:

c++ - c++ 中的“error ()”函数不适用于 Visual Studio 2015

c++ - 带对象的循环 vector

ios - 向下滚动时(或从 ipad 更改为 iphone 时)TableViewCell 边框和阴影

objective-c - 执行选择器 :withObject:afterDelay: not working in a NSPanel?

eclipse - 如何为 Eclipse 中的菜单项分配热键?

MacOSX 上的 Java : how to access files in the bundle

c++ - 给定数字位于哪个段?

c++ - 为 Windows x64 构建 log4cplus

android - 将照片存储/移动到手机中单独的应用程序文件夹

ios - SwiftUI:允许导航栏仅出现在主页/第一页上