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':
Py_Initialize'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference to
/главная/Би-би-си/СПЦ/IBJts/СРР/ЕС-АТС/Главная.cpp: 82: неопределенная ссылка наPyRun_SimpleStringFlags'
PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:83: undefined reference to
/главная/Би-би-си/СПЦ/IBJts/СРР/ЕС-АТС/Главная.cpp: 84: неопределенная ссылка наPyRun_SimpleStringFlags'
Py_Exit'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to
collect2: LD вернул 1 статус выхода
сделать: * [eu] Ошибка 1
помочь? спасибо!
1 ответов
взгляните на комментарий Лукаса для ответа:
" чтобы избавиться от предупреждения _POSIX_C_SOURCE, обязательно включите Python.h перед всеми другими файлами заголовков."
У меня была та же проблема. Я использую Boost Python, поэтому для меня я переместил включение boost / python.ГЭС до первой строки в моей .файл cpp.
(Лукас, разместите свой комментарий в качестве ответа, чтобы человек, который спросил, мог отметить его как правильный ответ, и вопрос не останется "без ответа" в Сайте StackOverflow.)