奇怪的情况...未定义对“ main”的引用

时间:2019-01-08 01:45:33

标签: c++ compiler-errors

在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;
}

1 个答案:

答案 0 :(得分:1)

案例关闭:在我的Python程序中,f.close()丢失了。缓冲区未写入program.cpp

感谢您的帮助!