2012-05-15 30 views
0

我試圖將一個Python腳本移植到舊的Solaris 10機器上。我從sunfreeware下載並安裝了所有必需的軟件包。它在進口線崩潰(進口CGIHTTPServer)與此錯誤消息:這個工作嗎?十六進制編輯文件,並將inet_aton更改爲inet_pton

ImportError: ld.so.1: python: fatal: relocation error: file /usr/local/lib/python2.6/lib-dynload/_socket.so: symbol inet_aton: referenced symbol not found

我試着用libresolve重新編譯,但我不想這樣做,所以我將文件複製到_socket.so我的Linux機器並用ghex2編輯。我用inet_pton替換了inet_aton,因爲我讀到solaris使用inet_pton。我也讀過python documentation that both system calls are similar

我將文件_socket.so複製回原來的目錄,備份了舊的並替換爲已打補丁的文件。它正在運行,並且目前看起來還不錯。

您認爲python套接字模塊將在未來破?

inet_atoninet_pton返回結構兼容嗎?

+0

我不知道,用十六進制編輯器對二進制文件進行黑客攻擊是非常忍者。如果這是爲了生產使用,我只需從源代碼重建......否則,如果它工作到目前爲止,您可能沒問題。 – larsks

回答

0

否; inet_atoninet_pton不兼容。只看原型:

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

完全不同。試圖將其中一個換成另一個只會導致痛苦和痛苦(很可能會導致崩潰)。如果你已經這樣做了,而且它似乎正在工作,那可能是因爲使用inet_aton的代碼沒有被調用。

0

您是否認爲python套接字模塊將在未來破?

是的。 inet-aton和inet_pton不使用相同數量和類型的參數。第一次調用這個php函數時,你的代碼可能會破壞或至少失效。如果您(或您使用的圖書館)永遠不會打電話,那麼您可能是安全的。

相關問題