2016-07-15 10 views
0

私はUbuntu 14でコンパイルしてAnacondaパッケージとしてアップロードしたCython拡張を持っています。私はglibcの古いバージョンに同梱されているScientific Linux(6?)を実行している別のマシンにパッケージをインストールしようとしています。私はモジュールをインポートしようとすると、私は(のようなものを)なエラーこれを取得: Cythonの特定のglibcバージョンへのリンク

./myprogram: /lib/libc.so.6: version `GLIBC_2.14' not found (required by ./myprogram)

私は「のようなもの」と言う

- 実際に延長の.soの名前である「MYPROGRAM」。

このエラーは、memcpy機能のアップデート版を持つビルドシステムに新しいバージョンのglibcがあるためです。 http://www.lightofdawn.org/wiki/wiki.cgi/NewAppsOnOldGlibc

もあり、はるかに簡単な答えはここで提案:How can I link to a specific glibc version?

私の質問です:私はこのソリューションを適用する方法を

このページには、問題の適切な説明、およびいくつかのかなり非現実的なソリューションを提供しています私のCython拡張に? __asm__ソリューションが(2番目のリンクで与えられているように)動作すると仮定すると、Cythonによって生成されたCにそれを入れる最良の方法は何ですか?

また、より一般的には、他のモジュールがこの問題を最初に回避する方法を教えてください。たとえば、何も問題なくnumpyのあらかじめ作成されたコピーをインストールして実行しました。

答えて

0

これは非常に簡単であることが判明しました。

glibc_fix.h以下のヘッダを作成します。次にCFLAGS="-include glibc_fix.h"を使用してそれを含める __asm__(".symver memcpy,[email protected]_2.2.5")

を。これは環境変数として設定するか、setup.pyで定義します。

また、numpyはこの点で特別なことはしません。私が自分でコンパイルすると、私のシステム上の新しいバージョンにリンクします。

関連する問題