0

Python スクリプトを古い Solaris 10 マシンに移植しようとしています。必要なパッケージをすべて sunfreeware からダウンロードしてインストールしました。インポート行 (import CGIHTTPServer) でクラッシュし、次のエラー メッセージが表示されました。

ImportError: ld.so.1: python: 致命的: 再配置エラー: ファイル /usr/local/lib/python2.6/lib-dynload/_socket.so: シンボル inet_aton: 参照されたシンボルが見つかりません

libresolve で再コンパイルしようとしましたが、やりたくなかったので、ファイル _socket.so を Linux マシンにコピーし、ghex2 で編集しました。solaris が代わりに inet_pton を使用していると読んだので、inet_aton を inet_pton に置き換えました。また、両方のシステムコールが似ていることをPythonのドキュメントで読みました。

ファイル _socket.so を元のディレクトリにコピーし、古いものをバックアップして、パッチを適用したものに置き換えました。動作しており、今のところ問題ないようです。

Python ソケット モジュールは将来壊れると思いますか?

inet_aton互換性のある構造体をinet_pton返しますか?

4

2 に答える 2

0

Python ソケット モジュールは将来壊れると思いますか?

はい。inet-aton と inet_pton は、同じ数と型の引数を使用しません。このphp関数が最初に呼び出されたときに、コードが壊れるか、少なくとも機能不全になる可能性があります。あなた(またはあなたが使用するライブラリ)がそれを決して呼び出さない場合、おそらく安全です。

于 2012-05-15T01:55:14.900 に答える
0

いいえ; inet_aton互換性がありinet_ptonません。プロトタイプを見てください:

int inet_aton(const char *, struct in_addr *);
int inet_pton(int, const char *, void *);

全く違います。一方を他方に交換しようとしても、痛みと苦しみが生じるだけです (そして、ほとんどの場合、クラッシュします)。これを実行して動作しているように見える場合は、おそらく を使用するコードinet_atonが呼び出されていないことが原因です。

于 2012-05-15T01:39:12.307 に答える