g++ с python.h, как скомпилировать

я компилирую один тестовый код с 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);  
} 

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  

этот проект компилируется отлично и работает, единственное изменение, которое я сделал, это добавление тестового кода в основном.файл cpp. предупреждение / Сообщение об ошибке показывает:

включить в /usr/включать/вместо python2.7/питон.h: 8: 0,
от сети.cpp: 15:
/ usr / include / python2.7 / pyconfig.h: 1158: 0: предупреждение: "_POSIX_C_SOURCE" переопределено [включено по умолчанию]
в /usr/включать/особенности.h: 163: 0: Примечание: это расположение предыдущего определения
/ usr / include / python2.7 / pyconfig.h: 1180: 0: предупреждение: "_XOPEN_SOURCE" переопределено [включено по умолчанию]
в /usr/включать/особенности.h: 165: 0: Примечание: это расположение предыдущего определение
g++ - L / usr/ lib / - lpython2.7-ldl-lutil-o eu EClientSocketBase.o EPosixClientSocket.o PosixTestClient.o Main.o
Главный.о: в функции main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference to
Py_Initialize'
/главная/Би-би-си/СПЦ/IBJts/СРР/ЕС-АТС/Главная.cpp: 82: неопределенная ссылка на PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:83: undefined reference to
PyRun_SimpleStringFlags'
/главная/Би-би-си/СПЦ/IBJts/СРР/ЕС-АТС/Главная.cpp: 84: неопределенная ссылка на PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to
Py_Exit'
collect2: LD вернул 1 статус выхода
сделать: * [eu] Ошибка 1

помочь? спасибо!

1 ответов


взгляните на комментарий Лукаса для ответа:

" чтобы избавиться от предупреждения _POSIX_C_SOURCE, обязательно включите Python.h перед всеми другими файлами заголовков."

У меня была та же проблема. Я использую Boost Python, поэтому для меня я переместил включение boost / python.ГЭС до первой строки в моей .файл cpp.

(Лукас, разместите свой комментарий в качестве ответа, чтобы человек, который спросил, мог отметить его как правильный ответ, и вопрос не останется "без ответа" в Сайте StackOverflow.)