一个奇怪的案例...对"主要"的未定义引用

A curious case of... undefined reference to `main'

本文关键字:案例 主要 引用 未定义 一个      更新时间:2023-10-16

在Facebook上,有一个简单的挑战 - 用你的语言写"我是一名程序员"。

当然,我可以这样做

print("I am a programmer")

这很无聊。无论如何,我需要进行心理健康检查。

因此,我编写了一个 Python3 脚本,该脚本编写了一个C++文件,尝试编译它,获取C++程序的输出,并显示"我是程序员"。

from os import system
from subprocess import getoutput
from subprocess import call
def main(string):
    # removes the old version, if it exists
    system("rm -rf program.cpp")
    # creates the file
    f = open("program.cpp", "a")
    output = "#include <iostream>n"
    f.write(output)
    output = "using namespace std;n"
    f.write(output)
    output = "int main()n{n"
    f.write(output)
    output = """tcout << "I am a programmer" << endl;n"""
    f.write(output)
    output = "return 0;n"
    f.write(output)
    output = "}n"
    f.write(output)
    # COMPILE!
    call("g++ program.cpp", shell=True)
    # call the program, get its output...
    out = getoutput("./a.out")
    # print the output
    print(out)
main("I am a programmer")

。那么我无法编译:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status

program.cpp包含int main(),所以这不可能是问题。

当我在命令行上g++ program.cpp时 - 而不是从 Python 脚本 - 它会编译。没关系。这很令人沮丧。

编辑:生成的.cpp文件的内容:

#include <iostream>
using namespace std;
int main()
{
    cout << "I am a programmer" << endl;
return 0;
}

案例已结案:在我的 Python 程序中,缺少f.close()。缓冲区未写入program.cpp

感谢您的帮助!