Witam.
Otóż chciałem napisać sobie drobne narzędzie w pythonie, które miało pokazywać rozmiar podanej w parametrze struktury z języka C.
Poniżej kod z pliku sizeof.py:
import subprocess
import sys
part1 = "#include <stdio.h>\n#include <windows.h>\nint CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hprevinstance, LPSTR lpCmdLine,int nCmdShow)\n{\n printf(\"%i\", sizeof("
part2 = "));\n (void)hInstance;\n (void)hprevinstance;\n (void)lpCmdLine;\n (void)nCmdShow;\n return 0;\n}"
if len(sys.argv) != 2 or sys.argv[1] == "":
print("Usage: sizeof <C structure name>\n Accepts both native C structures and Winapi structures")
sys.exit();
code = part1 + sys.argv[1] + part2
try:
file = open("tmp.c", "w")
except IOError:
print("Failed to open temporary file.")
sys.exit()
file.write(code)
subprocess.call("make")
Aby skompilować plik wywołuję polecenie make.
Kod z pliku makefile:
all: tmp.c
gcc -Wall -Wextra -std=c11 tmp.c -o tmp.exe
Niestety linker wyrzuca następujący błąd:
undefined reference to
WinMain@16'`
Jeżeli ręcznie wywołam polecenie make, to wszystko działa jak należy. Podejrzewam, że python zmienia coś w konfiguracji środowiska gcc, ale jestem nowy w tym języku, więc nie bardzo wiem, co i jak to poprawić. Z góry dzięki za pomoc.
PS Nie mogłem znaleźć odpowiedniego podświetlania składni. Mam nadzieję, że się nie obrazicie. :)
PPS Oczywiście wszystko robię pod Windows'em.