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 moi
Aihe on jo aika vanha, joten et voi enää vastata siihen.