Yritin ratkoa putkapostia piinkova salasana. Sain sen toimimaan python3:lla ja pypyllä. Mutta kun koetin kääntää sen cythonilla C:ksi ja siitä gcc:llä ajettavan tiedoston Linuxille, ei käännös onnistunutkaan. Miten saan tuon käännöksen tehtyä?
# -*- coding: utf-8 -*-
print("moi")(Mod. huom: ei tarpeetonta pitkää rot13-koodia, kiitos!)
jaakko@jaakko-Aspire-E1-572:~/Desktop/Kaikki/Programming$ cython piinkova.py jaakko@jaakko-Aspire-E1-572:~/Desktop/Kaikki/Programming$ gcc piinkova.c piinkova.c:4:20: fatal error: Python.h: No such file or directory compilation terminated.
Kuten virheilmoituksesta selvästi käy ilmi, sinulta puuttuu Python.h, tai siis et ole kertonut kääntäjälle polkua kyseiseen tiedostoon. Dokumentaation mukaan gcc:lle pitää antaa oikean Python-version mukainen polku, esimerkiksi -I/usr/include/python3.6m varmaankin, ja vastaavasti täytyy myös linkittää Python, esimerkiksi -lpython3.6m. Lisäksi ohjelmasta puuttuu main-funktio, koska Cythonilla tehdään yleensä kirjastoja. Jotta ohjelmaan tulisi main-funktio, tarvitaan cythonille parametri --embed.
echo "print('moi')" > a.py
cython a.py -o a.c --embed
gcc a.c -o a.out -I/usr/include/python3.6m -lpython3.6m
./a.out
# -> tulostaa moiAihe on jo aika vanha, joten et voi enää vastata siihen.