Любопытный случай ... неопределенная ссылка на `main ' - PullRequest
0 голосов
/ 08 января 2019

В 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 голосов
/ 08 января 2019

Дело закрыто: в моей программе на Python отсутствует f.close(). Буфер не был записан в program.cpp.

Спасибо за вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...