G ++ with python.h how to compile

I am compiling one test code with g ++ without any problems.

#include "Python.h" int main(int argc, char** argv) { Py_Initialize(); PyRun_SimpleString("import pylab"); PyRun_SimpleString("pylab.plot(range(5))"); PyRun_SimpleString("pylab.show()"); Py_Exit(0); } 

g++ -o test test.cpp -I/usr/include/python2.7/ -lpython2.7 works fine and works.

But when I try to embed this code in another project, it fails. It really bothers me.

The makefile is as follows.

 CXX=g++ CXXFLAGS=-DIB_USE_STD_STRING -Wall -Wno-switch -g ROOT_DIR=.. BASE_SRC_DIR=${ROOT_DIR}/PosixSocketClient INCLUDES=-I${ROOT_DIR}/Shared/ -I${BASE_SRC_DIR} -I/usr/include/python2.7 LIBRARY=-L/usr/lib/python2.7/config TARGET=eu $(TARGET): $(CXX) $(CXXFLAGS) $(INCLUDES) -o EClientSocketBase.o -c $(BASE_SRC_DIR)/EClientSocketBase.cpp $(CXX) $(CXXFLAGS) $(INCLUDES) -o EPosixClientSocket.o -c $(BASE_SRC_DIR)/EPosixClientSocket.cpp $(CXX) $(CXXFLAGS) $(INCLUDES) -o PosixTestClient.o -c PosixTestClient.cpp $(CXX) $(CXXFLAGS) $(INCLUDES) -o Main.o -c Main.cpp $(CXX) $(LIBRARY) -lpython2.7 -o $@ EClientSocketBase.o EPosixClientSocket.o PosixTestClient.o Main.o clean: rm -f $(TARGET) *.o 

This project compiles and runs, the only change I made is to add the test code to the Main.cpp file. warning / error message:

In the file included in / usr / include / python 2.7 / Python.h: 8: 0, from Main.cpp: 15:
/usr/include/python2.7/pyconfig.h:1158:07: warning: "_POSIX_C_SOURCE" is overridden [enabled by default]
/usr/include/features.h:163:07: note: this is the location of the previous definition
/usr/include/python2.7/pyconfig.h:1180:07: warning: "_XOPEN_SOURCE" overridden [enabled by default]
/usr/include/features.h:165:07: note: this is the location of the previous definition
g ++ -L / usr / lib / -lpython2.7 -ldl -lutil -o eu EClientSocketBase.o EPosixClientSocket.o PosixTestClient.o Main.o
Main.o: In the main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference to
function main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference to
main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference to
main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference to
Py_Initialize '
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:82: undefined link to PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:83: undefined reference to
PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:83: undefined reference to
PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:83: undefined reference to
PyRun_SimpleStringFlags "
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:84: undefined link to PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to
PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to
PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to
Py_Exit '
collect2: ld returned 1 exit status
make: * [eu] Error 1

any help? thanks!

+6
c ++ python makefile
source share
1 answer

Take a look at Lucas comment:

"To get rid of the _POSIX_C_SOURCE warning, be sure to include Python.h in front of all other header files."

I had the same problem. I use Boost Python, so for me I included boost / python.hpp on the first line in my .cpp file.

(Lucas, write your comment as an answer so that the person who asked can mark it as the correct answer, and the question will not remain “unanswered” in StackOverflow.)

+13
source share

All Articles