2017-06-01 8 views
0

私のC++プロジェクトにPythonを埋め込もうとしています。私は、C++で利用できないKolmogorov-Smirnovテストを実装するいくつかの関数を使用するために、それを行う必要があります。私のC++プロジェクトにPythonを埋め込むためにXcodeフラグを設定する

今のところ、XcodeがPythonを組み込んだ簡単なプログラムをリンクしてコンパイルできるかどうかを確認しようとしています。私は追加する必要がコンパイルするために、このためにはPython/C API Reference Manual - Introduction:私の知る限り、私はここで読んだ説明から理解できるよう

#include<Python/Python.h> 

int main(int argc, const char * argv[]) { 

    Py_Initialize(); 
    PyObject* variable; 
    Py_Finalize(); 
    return 0; 
} 

1. Embedding Python in Another Application - 1.6 Compiling and Linking under Unix-like systems、ここ 私がコンパイルしようとしているコードは以下のとおりです。コンパイラとリンカに対するいくつかの追加フラグ。私は追加する必要がありますどのフラグを見つけるために

、私は(そのIは、対応する出力を含みます)、私の端末では、次の2つのコマンドを実行しました:私は、実際の名前に置き換え

$ python3.6-config --cflags   
-I/Users/user/anaconda3/include/python3.6m -I/Users/user/anaconda3/include/python3.6m -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/user/anaconda3/include -arch x86_64 -I/Users/user/anaconda3/include -arch x86_64 

$ python3.6-config --ldflags 
-lpython3.6m -ldl -framework CoreFoundation -Wl,-stack_size,1000000 -framework CoreFoundation 

私のユーザフォルダはuserです。

これらのフラグをXcodeコンパイラとリンカーに追加するために、私はプロジェクト設定ウィンドウに行きました。Build Settings -> Other C FlagsBuild Settings -> Other Linker Flagsの下に私は上記のフラグを追加しました。

しかし、私はこのエラーを取得するコンパイル:

Apple Mach-O Linker (ld) Error Group 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

をそして、それは私がreturn 0以外main関数内のすべての行をコメントアウトしても消えません。

私は間違っていることを理解していません。私はXcode 8.3.2を使用していますし、私のPythonのディストリビューションがある

Python 3.6.1 |Anaconda 4.4.0

答えて

0

[OK]を、私は解決策を見つけたと思います。それが実際に正しいのかどうかはわかりません(なぜ私は専門家ではないので、今のところそれがうまくいかない理由は分かりませんが)とにかく投稿します。 1. Embedding Python in Another Application - 1.6. Compiling and Linking under Unix-like systemsコマンドを実行したときに私の場合には、それはそうではないpython3.6-config --ldflags出力がフラグ-L/opt/lib/python3.4/config-3.4mが含まれていることを確認できます。

事は、あなたがこのページの指示を見ればということです。

私にリンクエラーを与えたフラグが-lpython3.6mであることを知った後、リンカが私のpythonディストリビューションなどのディレクトリを見つけることができなかったのかもしれないと考えました。

私はウェブページに表示されている名前に似た名前のフォルダへのパスを探しました。/Users/user/anaconda3/lib/python3.6/config-3.6m-darwinは、私が探していた名前に非常に似た名前のフォルダへのパスであることがわかりましたなぜなら私はmacOSディストリビューションだからです(多分、コマンドpython3.6-config --ldflagsがそれを見つけられなかったのですか?私は分かりません)。これは、おそらくそこにあるフォルダ名の最後の "-darwin"を除いてです。

これ以降、Xcodeの "Other Liker Flags"の冒頭に-L/Users/user/anaconda3/lib/python3.6/config-3.6m-darwinを追加しただけで、すべて(ほとんど)ほとんどうまくコンパイルされました。

私は2番目で、私は」しながら、最初のものを使用することによって、私は、システムのデフォルトのPythonの配布を含めていますので、私はまた、多分(#include<Python/Python.h>から#include<Python.h>に自分のコードの先頭にincludeの名前を変更しなければならなかった「ほとんど」ためと言いますアナコンダのものも含めて?もう一度、私は知らない)。

とにかく今はすべてがうまくコンパイルされるので、他の誰かが同じ状況にある場合にどうしたのか分かち合いました。