简体   繁体   中英

How do I compile a C program which includes Python.h on Windows?

I am trying to learn how to embed a Python interpreter into my C/C++ programs.

I like this concept because it may enable me to extend C programs at run time as well as enable users to write custom scripts/plugins.

Detailed instruction on embedding Python in C is provided at: https://docs.python.org/3/extending/embedding.html

I'm using example code provided in the Python documentation to figure out the mechanics involved:

embedded.c

#include <Python.h>

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

The problem is I can't figure out how to compile it on Windows using gcc.

C:\Users\user\embedded_python> gcc embedded.c
embedded.c:2:10: fatal error: Python.h: No such file or directory
 #include <Python.h>
          ^~~~~~~~~~
compilation terminated.

I think the problem is I need to link to the Python.h file, but I can't seem to get the compiler flags right:

C:\Users\user\Desktop\embedded_python>gcc -IC:\Users\user\AppData\Local\Programs\Python\Python38 -lPython38 embedded.c
embedded.c:2:10: fatal error: Python.h: No such file or directory
 #include <Python.h>
          ^~~~~~~~~~
compilation terminated.

How can I get this program to compile on Windows (preferably with gcc/g++ to avoid Visual Studio bloat)?

In Linux, but I suppose if you activate your Bash from windows and can perform a work around. First you have to install python3-dev

Then use this command line where your file is located, to compile (test is your filename)

gcc -Wall test.c -o test  $(pkg-config --cflags --libs python3)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM