Igazából kész gcc programhoz kell utólag GUI-t csinálnom, ami Linuxon és Windowson is fut, így a Python-Tkinter párost választottam.
Hogyan lehet Pythonból meghívni a c-ben létező
int myvar=myfunction(param1, param2)
funkciót?
Nem igazából ismerem a Pythont, így szájbarágósan, please....
- 6040 megtekintés
Hozzászólások
Google? Annyi helyen megírták már...
- A hozzászóláshoz be kell jelentkezni
http://docs.python.org/2.7/extending/extending.html
A bal felső sarokban kiválaszthatod a megfelelő Python verziót. (3.4-2.6 között)
- A hozzászóláshoz be kell jelentkezni
Ez nagyon jónak látszik, köszönöm.
- A hozzászóláshoz be kell jelentkezni
Próbálok ez alapján elindulni, de a kapott hibaüzenetekre adott Google-válaszok nem segítenek.
Olyanra figyelmeztetnek, ami nálam rendben van.
python-dev telepítve, forrásban #include Python.h ott van (kacsacsőrők között)
fordítónak átadva így: gcc -g try.c -I/usr/include/python2.7 -o try
Az oldalról copy/paste átvett mintapélda:
static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}
Hibaüzenet:
/tmp/cch3PNqm.o: In function `spam_system':
/home/steve/projects/c/try/try.c:965: undefined reference to `PyArg_ParseTuple'
/home/steve/projects/c/try/try.c:968: undefined reference to `Py_BuildValue'
collect2: error: ld returned 1 exit status
- A hozzászóláshoz be kell jelentkezni
Nem linkelted szerintem.
- A hozzászóláshoz be kell jelentkezni
gcc -g try.c -I/usr/include/python2.7 -o try
Ez így nem elég?
- A hozzászóláshoz be kell jelentkezni
No offense, de ha C-ben akarsz programozni, akkor meg kell azt tanulni, és nem 10 meg 100 kérdés-válasz formájában.
Hogy mégis segítsek ebben a konkrét esetben, a linkeléshez -l/-L paraméterek is kellenek. Hogy mi az a linkelés, az már egy szép nagy témakör.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy en felreertelmezem, de a link minthe arrol szolna, hogy C-bol hogy hivjunk Python-t.
De neked nem az ellenkezoje kell (azaz Python-bol akarsz C fuggvenyeke hivni)?
Persze lehet, hogy nem ertettem meg a kerdest, akkor elnezest.
/sza2
- A hozzászóláshoz be kell jelentkezni
Python-ból akarom a meglevő c program funkcióit hívni.
- A hozzászóláshoz be kell jelentkezni
En ezt ugy csinaltam, hogy a C forrastbol shared object-et / dll-t csinaltam, majd azokat hivtam a Python-bol a cdll.LoadLibrary() fuggvennyel, valahogy igy:
...
# Load it8512.dll
self.device = cdll.LoadLibrary("it8512.dll")
# Make prototype: int IT8512Init(char *serialPort, int address);
self.DeviceInit = self.device.IT8512Init
self.DeviceInit.argtypes = [c_char_p, c_int]
self.DeviceInit.restype = c_int
# Make prototype: int IT8512Close(void);
self.DeviceClose = self.device.IT8512Close
self.DeviceClose.argtypes = None
self.DeviceClose.restype = c_int
# Make prototype: int IT8512SetRemoteControlMode(int remoteMode);
self.DeviceSetRemoteControlMode = self.device.IT8512SetRemoteControlMode
self.DeviceSetRemoteControlMode.argtypes = [c_int]
self.DeviceSetRemoteControlMode.restype = c_int
# Make prototype: int IT8512SetInputState(int inputState);
self.DeviceSetInputState = self.device.IT8512SetInputState
self.DeviceSetInputState.argtypes = [c_int]
self.DeviceSetInputState.restype = c_int
...
Python-bol le tudod kerdezni az OS-t is, es eldontheted, hogy a .dll-t vagy a .so-t toltod-e be, attol fuggoen, hogy Windows vagy Linux.
/sza2
- A hozzászóláshoz be kell jelentkezni
Tetszik, köszönöm!
- A hozzászóláshoz be kell jelentkezni
Linkeleshez kene a library is, hogy mihez linkelje. -lpython, pl. Egy C (+ C program forditas/linkeles) gyorstalpalot kene keresned.
--
|8]
- A hozzászóláshoz be kell jelentkezni
Hogy egyszerűsítsem a kérdést, kiirtottam a parancsból minden feleslegeset (flex, bison, usb linkelése), hogy csak a lényegre lehessen koncentrálni. Így aztán szépen átsiklottam, hiába volt a linkelére figyelmeztetés, én a parancssori include meglétére asszociáltam. Sorry, ezt szépen benéztem.
- A hozzászóláshoz be kell jelentkezni
Egyik lehetséges irány: http://docs.python.org/2/library/ctypes.html
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni