私はPythonが埋め込まれたC++ライブラリを開発しています。私がしたいのは、Pythonライブラリを静的にリンクすることです。プロダクションサーバに切り替えると、設定上の問題は発生しません。これまでのところ、libpython3.5m.a
を静的にリンクすることができました(ソースからPythonをビルドしなければなりませんでした。パッケージライブラリは-fPIC
フラグでコンパイルされていないようです)。しかし、私が問題に来て、それが思われること、ないnumpyのはありません。ということ、PythonライブラリをNumpyでC(C++)に静的にリンク
ImportError: numpy.core.multiarray failed to import
そして、このエラーはimport_array1()
マクロによって引き起こされる:私は私のライブラリを使用するアプリケーションを実行すると、それはエラーで私を促し(AFAIK)は、numpyルーチンをC++にインポートするために使用されます。 libnpymath.a
とlibnpysort.a
をリンクしようとしましたが、これはnumpyビルドディレクトリにありますが、無駄です。このような静的なリンクが可能で、それをどうやって行うのか知っていますか?私はnumpyがC言語で書かれているので、可能であるはずです。
質問の最初の部分は、なぜあなたはdllファイルを使用しないでください! dllファイルを呼び出してctypesモジュールでそれらの関数を使うこともできます... sys.path.append( './ yourpath/yourpath')関数を使ってsysモジュールとの静的リンクを行うこともできますあなた自身のモジュールをインポートしてください... – DRPK
@DRPK問題は他のライブラリと同じです(私はLinux上にあるので、.dllよりむしろ.sollです)。私はubuntu16で開発しました。サーバーはdebianのストレッチです.2つの異なるバージョンのlibc.so(C++のライブラリ)があります。私は1つでコンパイルできず、他のものを使うことができないので、私は静的にリンクしたい。そして同じ状況がPythonのためです。私は3.5、3.4があります... –