[Python] Embedding Python in C, linking fails with undefined reference to `Py_Initialize'

Discussão em 'Python' iniciado por Stack, Agosto 5, 2025.

  1. Stack

    Stack Membro Participativo

    I am trying to compile the example from the docs https://docs.python.org/2.7/extending/embedding.html and my code looks exactly like the one under 5.1:

    #include <Python.h>

    int
    main(int argc, char *argv[])
    {
    Py_SetProgramName(argv[0]);
    Py_Initialize();
    PyRun_SimpleString("from time import time, ctime\n"
    "print 'Today is', ctime(time())\n");

    Py_Finalize();
    return 0;
    }


    I use the following command to compile it which works fine for me and gives me the desired object file:

    gcc -c $(python2.7-config --cflags) embedpy.c


    To link it I use the following command which ends up in the following error:

    gcc $(/usr/bin/python2.7-config --ldflags) embedpy.o
    embedpy.o: In function `main':
    /home/miguellissimo/embedpy.c:6: undefined reference to `Py_SetProgramName'
    /home/miguellissimo/embedpy.c:7: undefined reference to `Py_Initialize'
    /home/miguellissimo/embedpy.c:8: undefined reference to `PyRun_SimpleStringFlags'
    /home/miguellissimo/embedpy.c:11: undefined reference to `Py_Finalize'
    collect2: error: ld returned 1 exit status


    I can't find out what I am doing wrong or what I forget to get the example working.

    PS: The python2.7-config command gives the following output on my Xubuntu machine:

    >>> python2.7-config --cflags
    -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -fno-stri
    ct-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=
    4 -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-pr
    ototypes

    >>> python2.7-config --ldflags
    -L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpthread -ldl -luti
    l -lm -lpython2.7 -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions

    Continue reading...

Compartilhe esta Página