I am trying to compile a C program which uses Python.h
to execute some python scripts. Before adding the python, I had a makefile which works perfectly. I added the code to run the python script, which involves including the Python.h
file.
I edited the makefile to include this file, without success.
My makefile:
CC = g
SHELL = /bin/sh
EXECUTABLES = Software_V2
CFLAGS = -O2 -g0 -Wall -pedantic -Wstrict-prototypes -std=c99 $(shell python3-config --cflags)
LIBS = -lm -lrt -laes_access -lstdc -pthread
OBJS = $(EXECUTABLES).o
.PHONEY: all
all: $(EXECUTABLES)
.PHONEY: clean
clean:
rm -f *.[bo]
rm -f *.err
rm -f $(EXECUTABLES)
$(EXECUTABLES): $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LIBS) -o $@
I already installed following libraries:
sudo apt-get install python-dev
sudo apt-get install python3-dev
sudo apt install libpython3.7-dev
The error after running make
I'm receiving the following error:
g -c -o Software_V2.o Software_V2.cpp
Software_V2.cpp:3:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
make: *** [<builtin>: Software_V2.o] Error 1
I also tried changing the include from #include <Python.h>
to #include <python3.7m/Python.h>
None of my tries succeeded, I'm out of inspiration at this moment to try some new things, maybe you guys know how to solve my problem. Thank you!
CodePudding user response:
You are mixing C and C . These are completely different languages: you shouldn't confuse them.
In makefiles, the default rules use CC
to hold the C compiler and CXX
to hold the C compiler. Similarly, they use CFLAGS
to hold flags for the C compiler and CXXFLAGS
to hold flags for the C compiler.
In your makefile you've not set either the CXX
or the CXXFLAGS
variables, but you're trying to use the default rule to build your object file. The default value for CXX
is g
(on your system) and the default value for CXXFLAGS
is empty. That's why when make shows you the compile command, none of your options appear there:
g -c -o Software_V2.o Software_V2.cpp
If you're trying to compile C code (implied by the fact that your filename extension is .cpp
not .c
) then you should set CXXFLAGS
not CFLAGS
.
Also, it's wrong to set -std=c99
if you're trying to compile C ; that flag sets the C 1999 standard, not C .
CodePudding user response:
Try include "Python.h"
- when you use <> the pre-compiler looks in a different set of directories.
Also run python3-config --cflags
on the command line and make sure it gives you the right include directories - the Python.h file should be in one of them.
Ultimately, the problem is that the file is not being found in the standard directories that the pre-complier checks, nor in the directories that you specified (with the -I option).