今回python1.5をコンパイルしてみました.環境は
OS: SunOS 4.1.3_U1 (w/o JLE)
Compiler: gcc 2.7.2.2
X: X11R6.3
です.READMEに従い"sh ./configure","make"しましたと
ころ,途中はエラーや警告さえなくうまくいっていたので
すが,最後に
gcc -g -O2 -I./../Include -I.. -DHAVE_CONFIG_H -c python.c -o python.o
gcc python.o \
-L.. -lpython1.5 -ldl -lm -lc.1.9 -o python
collect2: ld returned 4 exit status
ld: -lpython1.5: expected libx.so(.major.minor.xxx)
make[1]: *** [link] Error 1
make[1]: Leaving directory `/usr/local/src/Python-1.5/Modules'
make: *** [python] Error 1
ってなことで怒られます.このldのエラーは
-lpython1.5 (つまりlibpython1.5.a) は
libx.so.mm.nn.xxを必要としていますが,
それが見付かりません.
という意味だと思うのですが,
(1) その解釈は正しいかどうか
(2) このエラーを無くする方法には何があるか
に関して,どなたかご存じの方がいっらしゃいましたら,
情報の提供をお願いします.
# "-l"が付いているのは何か変な気がします.
--
苫小牧工業高等専門学校 情報工学科 教官 川口 雄一
電話:0144-67-8936 mail:yuu...@jo.tomakomai-ct.ac.jp
yuu...@georg.jo.tomakomai-ct.ac.jp (KAWAGUCHI Yuuichi) writes:
> 川口@苫小牧高専といいます.
[snip]
> gcc -g -O2 -I./../Include -I.. -DHAVE_CONFIG_H -c python.c -o python.o
> gcc python.o \
> -L.. -lpython1.5 -ldl -lm -lc.1.9 -o python
> collect2: ld returned 4 exit status
> ld: -lpython1.5: expected libx.so(.major.minor.xxx)
>
> make[1]: *** [link] Error 1
> make[1]: Leaving directory `/usr/local/src/Python-1.5/Modules'
> make: *** [python] Error 1
>
> ってなことで怒られます.このldのエラーは
あまり SunOS 4.x は触っていないし, その上で Python 1.5 をコンパイルした
事もなかったんですが,
SunOS 4.1.4
gcc 2.7.2
で試してみました.
このエラーが発生する根本的な原因は分りませんでしたが, 一応こちらで
試してわかった事だけ書きます.
エラーの回避法については最後に書きました.
こちらでも
$ (cd Modules; gcc python.o -L.. -lpython1.5 -lnsl -ldl -lm -o python)
collect2: ld returned 4 exit status
ld: -lpython1.5: expected libx.so(.major.minor.xxx)
と, 同様のエラーになりました.
-lpython1.5.a というオプションは -L.. で指定している Modules/.. に
出来ているはずの libpython1.5.a とリンクするためのものですので, 不
正なものではないと思うのですが...
なぜだろう, と思いながら次のようにしてみると同様なエラーになりまし
た(-lnsl を -lnsl1.0 にして -lpython1.5 の前に持っていっただけ):
$ (cd Modules; gcc python.o -L.. -lnsl1.0 -lpython1.5 -ldl -lm -o python)
collect2: ld returned 4 exit status
ld: -lnsl1.0: expected libx.so(.major.minor.xxx)
さらに次のようにしても同様のエラーになりました (-lmonty.python にし
た):
$ (cd Modules; gcc python.o -L.. -lmonty.python -ldl -lnls -lm -o python)
collect2: ld returned 4 exit status
ld: -lmonty.python: expected libx.so(.major.minor.xxx)
存在しないライブラリを指定すると
$ (cd Modules; gcc python.o -L.. -lmontypython -lnsl -ldl -lm -o python)
collect2: ld returned 4 exit status
ld: -lmontypython: No such file or directory
というメッセージになるはずですので, どうも -l オプションで指定する
ライブラリ名の中に `.' が入っているとこのようなエラーにされてしまう
ようです(この理由は分りません...).
とりあえずこのエラーを避けるには
$ (cd Modules; gcc python.o ../libpython1.5.a -ldl -lnls -lm -o python)
とすれば良いです.
この部分だけ手でやるのも何ですので, Modules/Makefile.pre.in を次の
ように変更してから ./configure すればあとは make 一発で最後まで通る
と思います.
135c135
< -L.. -lpython$(VERSION) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python $(LDLAST)
---
> $(LIBRARY) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python $(LDLAST)
P.S.
ご存知かも知れませんが ;-) 日本語で Python についての情報交換をす
るためのメイリングリスト python-ml-jp というものがあります.
<A HREF="http://www.dblab.is.tsukuba.ac.jp/python-ml-jp/">
ただ今(というかいつでも)参加者募集中です :-)
/\
\\ 石川雅弘 ISHIKAWA, Masahiro // |==|
\\ 筑波大学大学院工学研究科 電子・情報工学専攻(博士後期1年) // |DD|
\\ 筑波大学電子情報工学系 データベース研究室 tel 0298-53-5385 // /||\
色々やっていただいたようで,お手数をおかけしました.
どうもあり難うございます.
In article <sqtafcn...@tierra.dblab.is.tsukuba.ac.jp> lun...@tierra.dblab.is.tsukuba.ac.jp (ISHIKAWA, Masahiro) writes:
> とりあえずこのエラーを避けるには
>
> $ (cd Modules; gcc python.o ../libpython1.5.a -ldl -lnls -lm -o python)
>
> とすれば良いです.
何人かの方から,石川さんのおっしゃるような
-lpython1.5 → libpython1.5.a
という変更をメイルで教えていただきました.それで,最
初のコンパイル時に忘れていたTcl/Tkとreadlineを
Modules/Setupに追加してコンパイルし直してみました.
今度はlibtcl.aとlibtk.aとlibreadline.aで同じような
ことを言われます.実際には,この三つのうち最初にある
やつについて怒られます.どうやらlibxxx.aだけがあって,
libxxx.so.n.mのないライブラリについては,怒られてし
まうようですね.
全部libxxx.aに書き換えて,もう一度コンパイルしてみ
ようと思います.こんなエラーは初めてです:-) 経験の浅
さを露呈してしまいました.
# SunOS 4.1.3ってもう過去のOSなんですね:-) あぁ(嘆息).
--
川口 雄一@苫高専情報 (yuu...@jo.tomakomai-ct.ac.jp)
Python-1.5をSunOS 4.1.3_U1上でコンパイルできました.
私の質問に対して助言をいただいたたくさんの方に感謝し
ます.実際に試行作業までしていただいた石川さんには厚
くお礼申し上げます.
結局,みなさんのおっしゃるとおり
-lpython1.5 → ../libpython1.5.a
の書き換えでうまくゆきました.なお,
In article <YUUICHI.98...@georg.jo.tomakomai-ct.ac.jp> yuu...@georg.jo.tomakomai-ct.ac.jp (KAWAGUCHI Yuuichi) writes:
> 今度はlibtcl.aとlibtk.aとlibreadline.aで同じような
> ことを言われます.実際には,この三つのうち最初にある
> やつについて怒られます.
ここは,私の誤りでした.実際の作業はlibtcl.a等ではな
くlibtcl76.aというバージョン番号が付いていました.こ
れを誤って"-ltcl7.6"と(禁断の)「.」を付けたために怒
られたのでした.
# Solaris 2.5では,一発だったのですが.
LaTeXのドキュメントを読もうと思っていますが,全部
で300ページぐらいありそうなので,印刷を躊躇していま
す:-)
--
川口 雄一@苫高専情報 (yuu...@jo.tomakomai-ct.ac.jp)