9

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 to

PyRun_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]エラー1 PyRun_SimpleStringFlags'
/home/bbc/TWS/IBJts/cpp/eu-ats/Main.cpp:85: undefined reference to


何か助けはありますか?ありがとう!

4

2 に答える 2

16

答えについては、ルーカスのコメントをご覧ください。

「_POSIX_C_SOURCE 警告を取り除くには、他のすべてのヘッダー ファイルの前に Python.h をインクルードしてください。」

私も同じ問題を抱えていました。私は Boost Python を使用しているので、boost/python.hpp のインクルードを .cpp ファイルの最初の行に移動しました。

(Lukas、コメントを回答として投稿して、質問した人が正しい回答としてマークできるようにします。StackOverflow で質問が「未回答」のままになることはありません。)

于 2013-08-26T15:22:56.133 に答える