g ++与python.h,如何编译

bbc*_*bbc 7 c++ python makefile

我用g ++编译一个测试代码没有任何问题.

#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);  
} 
Run Code Online (Sandbox Code Playgroud)

g++ -o test test.cpp -I/usr/include/python2.7/ -lpython2.7 工作正常,运行.

但是当我尝试将此代码嵌入到另一个项目中时,它会失败.这真让我困惑.

Makefile如下所示.

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  
Run Code Online (Sandbox Code Playgroud)

这个项目编译好并运行,我做的唯一改变是在Main.cpp文件中添加测试代码.警告/错误消息显示:

在/usr/include/python2.7/Python.h:8:0中包含的文件中,
来自Main.cpp:15:
/usr/include/python2.7/pyconfig.h: 1158:0 :警告:"_ POSIX_C_SOURCE"重新定义[默认启用]
/usr/include/features.h:163:0:注意:这是前一个定义的位置
/usr/include/python2.7/pyconfig.h:1180:0:警告:"_ XOPEN_SOURCE "重新定义[默认启用]
/usr/include/features.h:165:0:注意:这是前一个定义的位置
g ++ -L/usr/lib/-lpython2.7 -ldl -lutil -o eu EClientSocketBase的.o EPosixClientSocket.o PosixTestClient.o Main.o
Main.o:在功能Py_Initialize" /home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:82:未定义的引用PyRun_SimpleStringFlags' /家庭/ BBC/TWS/IBJts/cpp/eu-ats/Main.cpp:84:对Py_Exit的未定义引用' collect2:ld返回1退出状态 make:* [eu]错误1 main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: 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:85: undefined reference to


任何帮助?谢谢!

D. *_* A. 16

看看卢卡斯对答案的评论:

"要摆脱_POSIX_C_SOURCE警告,请确保在所有其他头文件之前包含Python.h."

我有同样的问题.我使用Boost Python,所以对我来说,我将boost/python.hpp的include包含在我的.cpp文件的第一行.

(Lukas,将您的评论作为答案发布,以便提问的人可以将其标记为正确的答案,并且问题在StackOverflow中不会保持"未答复".)