Python Forum
Embedded python fails to compile on Raspberry Pi
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Embedded python fails to compile on Raspberry Pi
#1
Hi all!

I installed python 3.9.1 on my Raspberry Pi following the instructions here and set it as the default python interpreter. I got my compiling and linking parameters for embedded Python following the instructions here

I tried a simple test with the following code (test.c) :
int
main(int argc, char *argv[])
{
    wchar_t *program = Py_DecodeLocale(argv[0], NULL);
    if (program == NULL) {
        fprintf(stderr, "Fatal error: cannot decode argv[0]\n");
        exit(1);
    }
    Py_SetProgramName(program);  /* optional but recommended */
    Py_Initialize();
    PyRun_SimpleString("from time import time,ctime\n"
                       "print('Today is', ctime(time()))\n");
    Py_Finalize();
    PyMem_RawFree(program);
    return 0;
}
and then

gcc -I/usr/local/opt/python-3.9.1/include/python3.9 -I/usr/local/opt/python-3.9.1/include/python3.9 -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -c test.c -o test.o

and

gcc -L/usr/local/opt/python-3.9.1/lib/python3.9/config-3.9-arm-linux-gnueabihf -L/usr/local/opt/python-3.9.1/lib -lcrypt -lpthread -ldl -lutil -lm -o test.o

and got
Error:
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crt1.o: In function '_start': /build/glibc-P1SmLh/glibc-2.19/csu/../ports/sysdeps/arm/start.S:119: undefined reference to 'main' collect2: error: ld returned 1 exit status
Trying to compile the example over here throws the same error. What could the problem be?
Reply
#2
I made some progress after changing the linker command to:

gcc test.o -L/usr/local/opt/python-3.9.1/lib/python3.9/config-3.9-arm-linux-gnueabihf -L/usr/local/opt/python-3.9.1/lib -lcrypt -lpthread -ldl -lutil -lm -o test

but I got a bunch of other errors:

Error:
test.o: In function `main': /home/pi/Downloads/test.c:16: undefined reference to `Py_Initialize' /home/pi/Downloads/test.c:17: undefined reference to `PyUnicode_DecodeFSDefault' /home/pi/Downloads/test.c:20: undefined reference to `PyImport_Import' /home/pi/Downloads/test.c:24: undefined reference to `PyObject_GetAttrString' /home/pi/Downloads/test.c:27: undefined reference to `PyCallable_Check' /home/pi/Downloads/test.c:55: undefined reference to `PyErr_Occurred' /home/pi/Downloads/test.c:56: undefined reference to `PyErr_Print' test.o: In function `_Py_DECREF': /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' test.o: In function `main': /home/pi/Downloads/test.c:67: undefined reference to `Py_FinalizeEx' test.o: In function `_Py_DECREF': /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' test.o: In function `main': /home/pi/Downloads/test.c:55: undefined reference to `PyErr_Occurred' /home/pi/Downloads/test.c:56: undefined reference to `PyErr_Print' /home/pi/Downloads/test.c:28: undefined reference to `PyTuple_New' /home/pi/Downloads/test.c:38: undefined reference to `PyTuple_SetItem' /home/pi/Downloads/test.c:30: undefined reference to `PyLong_FromLong' test.o: In function `_Py_DECREF': /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' test.o: In function `main': /home/pi/Downloads/test.c:40: undefined reference to `PyObject_CallObject' /home/pi/Downloads/test.c:43: undefined reference to `PyLong_AsLong' test.o: In function `_Py_DECREF': /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' test.o: In function `main': /home/pi/Downloads/test.c:63: undefined reference to `PyErr_Print' test.o: In function `_Py_DECREF': /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' test.o: In function `main': /home/pi/Downloads/test.c:49: undefined reference to `PyErr_Print' test.o: In function `_Py_DECREF': /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' /usr/local/opt/python-3.9.1/include/python3.9/object.h:430: undefined reference to `_Py_Dealloc' collect2: error: ld returned 1 exit status
This seems more serious. Any ideas?
Reply
#3
OK, problem solved. It seems that the behavior of the python3-config script was changed in Python 3.8: https://docs.python.org/3/whatsnew/3.8.h...ease-build

To embed Python into an application, a new --embed option must be passed to python3-config --libs --embed to get -lpython3.8 (link the application to libpython). To support both 3.8 and older, try python3-config --libs --embed first and fallback to python3-config --libs (without --embed) if the previous command fails.

So I changed the linker command to
gcc test.o -L/usr/local/opt/python-3.9.1/lib/python3.9/config-3.9-arm-linux-gnueabihf -L/usr/local/opt/python-3.9.1/lib -lcrypt -lpthread -ldl -lutil -lm -lpython3.9 -o test

and it finally worked! Thanks a lot everyone!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  How to run detectron2, as python embedded code in C++, on GPU? hassaniqbal931 3 1,040 Nov-02-2023, 04:45 PM
Last Post: blabling2
  Anaconda 2.4.2: The JupyterLab 3.5.3 fails to run the python code of the Geographical jamalnuman 0 316 Aug-23-2023, 07:48 AM
Last Post: jamalnuman
  Adding libraries to embedded Python as a ZIP The_Oman 0 1,194 May-05-2023, 04:05 PM
Last Post: The_Oman
  Video recording with Raspberry Pi - What´s wrong with my python code? Montezuma1502 3 1,192 Feb-24-2023, 06:14 PM
Last Post: deanhystad
Bug Embedded Python Memory Leaks Alexei 1 1,003 Sep-16-2022, 01:15 PM
Last Post: Alexei
  Embedded Python in C++ Xeno 19 3,400 Aug-03-2022, 07:29 AM
Last Post: Gribouillis
  How to compile a Python script for a Windows / Linux executable? netanelst 2 1,279 May-24-2022, 07:02 AM
Last Post: netanelst
  cv2-python will n ot compile?? barryjo 5 2,127 Dec-26-2021, 06:42 PM
Last Post: barryjo
  Coding for Python and Raspberry pi beast 3 39,602 Sep-21-2021, 09:56 PM
Last Post: beast
  Python Compile error ajitnayak1987 4 3,557 Jun-03-2021, 12:11 PM
Last Post: ibreeden

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020