[前][次][番号順一覧][スレッド一覧]

mysql:4220

From: e-oohira <e-oohira <e-oohira@xxxxxxxxxx>>
Date: Sun, 26 Aug 2001 23:21:07 +0900
Subject: [mysql 04220] Re: Ruby から使えない

おおひらです。


> >> bash-2.03# ruby -I. test.rb sparc.kumage-h.ed.jp
> >> test.rb:11:in `require': ld.so.1: ruby: 重大なエラー: 再配置
エラ
> >> ー: ファイル ./mysql.so: シンボル inet_addr: 参照シンボルが
見つか
> >> りません。 - ./mysql.so (LoadError)
> >>         from test.rb:11
> 
> ldd mysql.so したら、どうなりますか。

こうなりました。
bash-2.03# ldd mysql.so
        libc.so.1 =>     /usr/lib/libc.so.1
        libdl.so.1 =>    /usr/lib/libdl.so.1
        /usr/platform/SUNW,Sun-Blade-100/lib/libc_psr.so.1

> libmysqlclient.so が見つからないというエラーは出るでしょうか。
> inet_addr の実体が libmysqlclient.a にあるなら、mysql.so の作成
時に
> スタティックリンクするようにしてあげればいいと思います。
>

MySQLをソースコードから下記のようにインストールし
たところ
bash-2.03# ldd mysql.so
        libmysqlclient.so.10 =>  (ファイルが見つかりません)
        libz.so =>       /usr/local/lib/libz.so
        libm.so.1 =>     /usr/lib/libm.so.1
        libnsl.so.1 =>   /usr/lib/libnsl.so.1
        libsocket.so.1 =>        /usr/lib/libsocket.so.1
となるので
LD_RUN_PATH=(インストール先)/lib/mysql
と
libmysqlclient.soなどのありかを指定してやると
うまくいきました。

今はこんな状態です。
bash-2.03# ldd mysql.so
        libmysqlclient.so.10 => 
/sol/mysql/lib/mysql//libmysqlclient.so.10
        libz.so =>       /usr/local/lib/libz.so
        libm.so.1 =>     /usr/lib/libm.so.1
        libnsl.so.1 =>   /usr/lib/libnsl.so.1
        libsocket.so.1 =>        /usr/lib/libsocket.so.1
        libc.so.1 =>     /usr/lib/libc.so.1
        libcrypt_i.so.1 =>       /usr/lib/libcrypt_i.so.1
        libgen.so.1 =>   /usr/lib/libgen.so.1
        libdl.so.1 =>    /usr/lib/libdl.so.1
        libmp.so.2 =>    /usr/lib/libmp.so.2
        /usr/platform/SUNW,Sun-Blade-100/lib/libc_psr.so.1

私は、ライブラリ関係に(も)弱いので
mysql.so の作成時にスタティックリンクするようにしてあげればいいと
いう意味と実際の操作方法(どう指定するのか)がよくわからなかった
ので、これが本質的な解決法なのかもはっきりしません。

 

> >> configure時にエラーをはきます。
> >> 
> >> bash-2.03# ./configure --prefix=/usr/local/mysql
> >> --localstatedir=/usr/local/mysqldata \
> >> > --with-charset=ujis

> >> checking whether the C++ compiler (c++   ) is a
cross-compiler...
> >> yes
> 
> inet_addr の実体が libmysqlclient.a にあるなら、mysql.so の作成
時に
> これが原因です。
> たぶん、この gcc は 64bit と 32bit の両方のコードが吐けるものな
ので
> はないでしょうか。
> # 私も、このエラーを経験しましたが、その時は上記のコンパイラで
コン
> # パイルしたときでした。
> 
> で、この時は、cross-compiler オプションを無理矢理 no にするよ
う、
> configure ファイルを編集して、逃げました。(^^;
> # もっとスマートな方法があるような気もしましたが、時間がなかっ
たもので...。

とみたさんの指摘で
       % env CXX=gcc ./configure 〜〜
とやれば、できました。

-- 
e-oohira

[前][次][番号順一覧][スレッド一覧]