• 締切済み

GNU gettext が変なライブラリを参照している

Solaris 2.7 に GNU gettext 0.14.5 をインストールしようとしています.gmake は通るのですが,出来上がった xgettext や msgfmt などのバイナリを ldd すると, .libs/libgettextsrc-0.14.5.so => .libs/libgettextsrc-0.14.5.so .libs/libgettextlib-0.14.5.so => (file not found) .libs/libintl.so.3.4.3 => (file not found) libiconv.so.2 => /usr/local/lib/libiconv.so.2 libc.so.1 => /usr/lib/libc.so.1 libexpat.so.0 => /usr/local/lib/libexpat.so.0 .libs/libgettextlib-0.14.5.so => (file not found) .libs/libintl.so.3.4.3 => (file not found) libdl.so.1 => /usr/lib/libdl.so.1 /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1 となり,どうやら一時ディレクトリである .libs 以下のライブラリを参照してしまっているようです.当然,gettext を用いて make した他のプログラムも動かなくなってしまうため,とても困っています. 試しに gettext 0.10.40 という古いものを入れてみたところ,問題は起こりませんでした. libintl.so.1 => /usr/local/lib/libintl.so.1 libiconv.so.2 => /usr/local/lib/libiconv.so.2 libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1 /usr/platform/SUNW,Ultra-4/lib/libc_psr.so.1 回避策等あれば教えていただきたいです. なお,gcc は 2.7.2.3 です.よろしくお願いいたします.

  • foodp
  • お礼率81% (13/16)

みんなの回答

  • entree
  • ベストアンサー率55% (405/735)
回答No.1

make install は行えたんでしょうか? うまく行ったのであれば、作業ディレクトリはバッサリと削除してしまえばよいことだと思います。基本的に rpath (LDFLAGS="-R.libs"、LD_RUN_PATH=.libs など) や環境変数 LD_LIBRARY_PATH=.libs などとしない限り、/lib や /usr/lib しか見に行かない仕様になっているはずですので問題ないでしょう。 > .libs/libintl.so.3.4.3 => (file not found) libintl.so ってこんなに互換性ありませんでしたっけ? .libs/libintl.so.3 => (file not found) なら分かりますけど・・・。 > なお,gcc は 2.7.2.3 です. 最低でも、2.95 以上のバージョンをインストールしてください。ちなみに、お勧めは 3.2.3 で、環境変数 CFLAGS を"-O2 -mcpu=v8" に設定することです。

foodp
質問者

補足

ありがとうございます. >make install は行えたんでしょうか? make install 自体は行なえるんですが,install される xgettext やら msgfmt やらのバイナリがみな .libs/libintl.so.3.4.3 をみているので,使い物になりません.つまり,gettext を用いてコンパイルする他のプログラムがみな実行時に .libs/libintl.so.3.4.3 がないと言ってエラーを出してしまうようになります・・・. >libintl.so ってこんなに互換性ありませんでしたっけ? こちらとしても,とても不思議です.何か変なことが起こっているような気がします. そもそも,.libs 以下はコンパイル時に一時的に見るだけのはずなのに,何で設定が残っているのか全く理解に苦しみます. >最低でも、2.95 以上のバージョンをインストールしてください。ちなみに、お勧めは 3.2.3 で、環境変数 CFLAGS を"-O2 -mcpu=v8" に設定することです。 やはり 2.7.2.3 は古すぎますかね・・・(^^; すぐにバージョンを上げられるわけではないのですが,近いうちに上げたいと思っています.環境変数の設定等,ありがとうございます.非常に参考になります.

関連するQ&A

  • 2つのマシンでコンパイルしたldd結果の違いを無くしたい

    1台が SUNW Ultra-ENTERPRISE もう1台が SUNW,Ultra-30 で同じソース(mainのみのソースコード)をコンパイルし、lddコマンドを実行してみると SUNW,Ultra-30の方に /usr/platform/SUNW,Ultra-30/lib/libc_psr.so.1 というのが出てきてしまいます。 これを取り除きたいのですが、何をすれば良いのでしょう?

  • lddの見方について教えてください。

    必要なライブラリを表示しているのは分かったのですが=>の右側以上のバージョンのライブラリが必要という意味でしょうか?ということは=>となっているのは 存在していてOKということでしょうか? またnot foundとなったライブラリは一般的にどこでみつけて、どこに置けばいいでしょうか? [root@localhost DiCE]# ldd dice /lib/libNoVersion.so.1 (0x00b37000) libqtintf.so => not found libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x0081b000) libpthread.so.0 => /lib/libpthread.so.0 (0x00a77000) libdl.so.2 => /lib/libdl.so.2 (0x00815000) libc.so.6 => /lib/libc.so.6 (0x00d1c000) /lib/ld-linux.so.2 (0x006ab000)

  • 共有ライブラリが見つからない

     お世話になります。  xxxxxというソフトウェアを動作させようとしたところ、下記のようなエラーメッセージが出ました。 > ld.so.1: xxxxx: fatal: libsasl.so: version `SUNWprivate1.1' not found (required by file /usr/lib/mps/libldap60.so) > ld.so.1: xxxxx: fatal: libsasl.so: open failed: No such file or directory > rc = 9 ■質問1  これは、 ・ld.so.1という共有モジュールが ・内部的にrequired by file /usr/lib/mps/libldap60.so というモジュールを呼んでいて ・それがlibsasl.soを呼ぼうとしたときに ・`SUNWprivate1.1'というバージョンのものがない というエラーだと解釈してよろしいでしょうか。 ■質問2  findでlibsasl.soを検索したところ、下記の場所にありました。 > /usr/lib/sparcv9/libsasl.so > /usr/lib/libsasl.so crleコマンドで共有ライブラリの検索パスを見てみたところ、/usr/libは含まれていました。 > @root# crle -v > > 構成ファイル [バージョン 4]: /var/ld/ld.config > デフォルトライブラリパス (ELF): /usr/lib:/usr/local/ssl/lib/:/usr/lib/mps > トラステッドディレクトリ (ELF): /usr/lib/secure:/opt/SUNWmsgsr/lib:/usr/lib/mps > > コマンド行: > crle -c /var/ld/ld.config \ > -l /usr/lib:/usr/local/ssl/lib/:/usr/lib/mps \ > -s /usr/lib/secure:/opt/SUNWmsgsr/lib:/usr/lib/mps  それでもエラーが出るのは ・このディレクトリにあるlibsasl.soが`SUNWprivate1.1'というバージョンではないから という解釈でよろしいでしょうか。 ■質問3 `SUNWprivate1.1'というバージョンのlibsasl.soを検索する方法があるでしょうか。  いろいろですみません。よろしくお願いいたします。

  • png2jpeg・resize.pl

    png2jpegと、resize.plを使ってサムネイルを作成しようと考えています。 ファイルをアップロードするupload.cgiは作成し、画像をサーバーに転送することはできるのですが、 上の2つのファイルをどのように関連付ければ良いのかがわかりません。 check.cgiを見ると、 PerlMagick NG NetPBM + libjpeg-progs NG cjpeg -> /usr/bin/cjpeg djpeg -> /usr/bin/djpeg pngtopnm -> Not Found giftopnm -> Not Found pnmscale -> Not Found repng2jpeg(i386-linux) dynamic :OK standard:OK static :OK libjpeg -> /usr/lib/libjpeg.so.62 libpng -> /usr/lib/libpng.so.2 libz -> /usr/lib/libz.so.1 libm -> /lib/libm.so.6 libc -> /lib/libc.so.6 ldlinux -> /lib/ld-linux.so.2 ---------------------------------------- ./repng2jpeg Found SIZE : 59556 MD5 : 6f03c0ec0 ./repng2jpeg Permisson:OK ./repng2jpeg Exec:OK ->(repng2jpeg TestMode:OK version 1.0.4) $ldd ./repng2jpeg libpng.so.2 => /usr/lib/libpng.so.2 (0x00a36000) libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x002c2000) libc.so.6 => /lib/tls/libc.so.6 (0x005fe000) libm.so.6 => /lib/tls/libm.so.6 (0x00736000) /lib/ld-linux.so.2 (0x005e4000) ---------------------------------------- と表示され、使用可能な状態ではあると思います。 以上よろしくお願いします。

  • dyld: Library not loaded:

    Tgifというドローツールをインストールし、ターミナルから起動しようとしたら dyld: Library not loaded: /usr/local/lib/libintl.2.dylib Referenced from: /usr/local/bin/tgif Reason: image not found Trace/BPT trap という表示が出て起動することができませんでした。 このエラー(?)の解決方法を教えてください。 起動方法自体はあっているはずです(tgif と打ち込むだけ) OSX 10.5.7を使用しています。よろしくお願いします。

    • 締切済み
    • Mac
  • opensshのインストールができない

    solaris9上でOPENSSH-4.2p1をインストールしていますが、うまくいきません。下記のようなエラーが出ます。 未定義の 最初に参照している シンボル ファイル dlsym /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) dlopen /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) dlclose /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) dlerror /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o) (シンボルは暗黙 の依存性 /usr/lib/libdl.so.1 に属しています) ld: 重大なエラー: シンボル参照エラー。ssh に書き込まれる出力はありません。 collect2: ld returned 1 exit status make: *** [ssh] Error 1 opensslは0.9.8、zlibは1.2.3をソースから入れました。 アドバイスお願いします。

  • CentOs5.8Apacheのリビルド

    CentOS5.8でSNIを使おうと思っています。 そのためのOpenSSL1.0.1eはインストールできました そのOpensslをApacheに適用させるために既存のApacheのリビルドをしたいと思っています ですが、現在のApacheの設定をそのままにリビルドする方法はありますか? 現在1日はまってしまい、非常に困っています。 下記OpenSSLの更新作業 ===================================================== # wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz # tar zxvf openssl-1.0.1e.tar.gz # cd openssl-1.0.1e # ./config enable-tlsext -fPIC shared # make # make test # make install ※デフォルト/usr/local/ssl/にインストールされるみたいです。 ・まずはパスを認識させます # echo /usr/local/ssl/lib > /etc/ld.so.conf.d/openssl.conf # ldconfig ・既存のopensslの実行ファイルを今回インストールした物と変更します。 # cd /usr/bin # mv openssl openssl.old # ln -s /usr/local/ssl/bin/openssl ・シェアードライブラリが正しくリンクできているか確認 # ldd /usr/local/ssl/bin/openssl linux-vdso.so.1 => (0x00007fff49bf2000) libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00002b5327442000) libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00002b53276a7000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003f36000000) libc.so.6 => /lib64/libc.so.6 (0x0000003f35400000) /lib64/ld-linux-x86-64.so.2 (0x0000003f34c00000) =================================================================================== 宜しくお願い致します。

  • 特定のライブラリを参照しているか調べる方法

    ソースからビルドしたあるコマンドが共有ライブラリ(/usr/local/lib)にある特定のsoファイルやlaファイルを参照できていないのではという疑念があります。ビルドしたコマンドが参照しているか調べる方法(コマンド)があるらしいのですがどういうコマンドを打てばよいでしょうか。下記であってますでしょうか。その場合、どのような見方をすればよいでしょうか。 readelf -a `which コマンド名`

  • Red Hat ES 3にPHP5.2.5インストール時のconfigureエラー

    Red Hat ES 3にPHP5.2.5をインストールしようとしています。 configure時に(オプションは後述)、 configure: error: GD build test failed. Please check the config.log for details. と出てしまい、config.logを見てもよくわかりません。 (config.log 頭省略) configure:43450: gcc -o conftest -g -O2 -Wl,-rpath,/usr/local//lib -L/usr/local//lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib -Wl,-rpath,/usr/local//lib -L/usr/local//lib conftest.c -lgd -lgd -lfreetype -lpng -lz -ljpeg -lz -lresolv -lm -ldl -lnsl -lxml2 -lz -lm -lxml2 -lz -lm 1>&5 /usr/local//lib/libgd.so: undefined reference to `libiconv_open' /usr/local//lib/libgd.so: undefined reference to `libiconv_close' /usr/local//lib/libgd.so: undefined reference to `libiconv' collect2: ld returned 1 exit status configure: failed program was: #line 43439 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gdImageCreate(); int main() { gdImageCreate() ; return 0; } --------------------------- undefined reference to `libiconv_open' かなと予想していますが、どこをどうしていいのやら? ちなみに # ls -l /usr/local/lib/libgd.so /usr/local/lib/libgd.so -> libgd.so.2.0.0 でちゃんとシンボリックリンクは設定されているようです。 どなたか対処方法・調査方法がご存知の方、ぜひぜひご教授ください。m(_._)m ※ configureオプション ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-mbsrt-enc-trans --enable-mbregex --enable-trans-sid --with-mysql=/usr/local/mysql --with-zlib-dir=/usr/local/lib --with-png-dir=/usr/local/lib --with-jpeg-dir=/usr/local/lib --with-freetype-dir=/usr/local/lib --with-gd=/usr/local/ --enable-gd-native-ttf --enable-gd-jis-conv

    • 締切済み
    • PHP
  • 共有ライブラリ作成時の -L

    sub1.c sub2.cからlibsub1.so libsub2.soを作成し、main.cをコンパイルします。 いずれのファイルも/rootにあります。 ここで gcc -c sub1.c gcc -shared -o libsub1.so sub1.o gcc -c sub2.c gcc -shared -o libsub2.so sub2.o gcc -o main main.c libsub1.so  libsub2.so だけでは [root@localhost ~]# ldd main linux-gate.so.1 => (0x0020d000) libsub1.so.1 => not found libsub2.so.1 => not found libc.so.6 => /lib/libc.so.6 (0x003e3000) /lib/ld-linux.so.2 (0x003c4000) でロードされていないので ln -s /root/libsub1.so /usr/lib/libsub1.so ln -s /root/libsub2.so /usr/lib/libsub2.so で/usr/libにシンボリックリンクを張る必要があります。 このリンクをはる作業をなんとかしてコンパイラのオプションを用いて省略したいとおもっています。 そこで gcc -o main main.c -L/root/libsub1.so -L/root/libsub2.so としたのですが /tmp/cc4Ccfom.o: In function `main': main.c:(.text+0x12): undefined reference to `print' collect2: ld はステータス 1 で終了しました make: *** [main] エラー 1 になってしまいました。 上の状況で質問は2つあります。 (1)gccのオプションを用いてシンボリックリンクを張る作業を省略するにはどうすればいいでしょうか?(私はーLの使い方を見よう見まねで用いたのですがまずかったようでエラーがでました。) (2)上のエラーは何が原因だったのでしょうか? ソースは //sub1.c #include "sub.h" int TEST=10; //sub2.c #include "sub.h" #include <stdio.h> void print(void) { if(TEST) printf("TEST is HOGE!\n"); } //main.c #include "sub.h" #include <stdio.h> int main(void) { print(); return 0; } //sub.h extern int TEST; です。 どちらかでも回答できるかたがいらっしゃれば、お願いします。