1つのテストコードを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
このプロジェクトは正常にコンパイルされて実行されます。私が行った唯一の変更は、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への未定義の参照'main':
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:81: undefined reference toPyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:83: undefined reference to
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:84:Py_Exitの未定義の参照' collect2:ldが1つの終了ステータスを返しました make:* [eu]エラー1PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to
何か助けはありますか?ありがとう!