
Ubuntu日本語フォーラム

ログインしていません。
始めて質問させていただきます。よろしくおねがいします。
Ubuntu 12.04.3 LTS (GNU/Linux 3.8.0-29-generic i686)を使っています。
qdbm-1.8.75(http://sourceforge.jp/projects/sfnet_qdbm/downloads/qdbm/1.8.75/qdbm-1.8.75.tar.gz/)を
makeしようとしていますが、以下のようなエラーが出ます。
$make
if uname -a | egrep -i 'SunOS' > /dev/null ; \
then \
gcc -shared -Wl,-G,-h,libqdbm.so.14 -o libqdbm.so.14.11.0 depot.o curia.o relic.o hovel.o cabin.o villa.o vista.\
o odeum.o myconf.o -L. -L/usr/local/lib -L/home/navi/lib -L/usr/local/lib ; \
else \
gcc -shared -Wl,-soname,libqdbm.so.14 -o libqdbm.so.14.11.0 depot.o curia.o relic.o hovel.o cabin.o villa.o vis\
ta.o odeum.o myconf.o -L. -L/usr/local/lib -L/home/navi/lib -L/usr/local/lib -lc ; \
fi
depot.o: In function `dpecodeset.part.3':
depot.c:(.text+0x3ac): undefined reference to `__stack_chk_fail_local'
depot.o: In function `dprecrewrite':
depot.c:(.text+0x12c3): undefined reference to `__stack_chk_fail_local'
depot.o: In function `dprecappend':
depot.c:(.text+0x18fd): undefined reference to `__stack_chk_fail_local'
depot.o: In function `dpfcopy.constprop.15':
depot.c:(.text+0x1bc4): undefined reference to `__stack_chk_fail_local'
depot.o: In function `dpopen':
depot.c:(.text+0x2697): undefined reference to `__stack_chk_fail_local'
depot.o:depot.c:(.text+0x2e93): more undefined references to `__stack_chk_fail_local' follow
collect2: ld はステータス 1 で終了しました
make: *** [libqdbm.so.14.11.0] エラー 1この中の-lcは手で加えました。-lcを書く場所もいろいろ変えてみましたが、駄目でした。
なにしろ古いソースなものですから ./configure のコンパイラのチェックを手で無効にするような事を
いろいろしていてそれが原因かもと思ったのですが、ここ↓に書いてあることが答えなのかもと思いました。
http://lists.freebsd.org/pipermail/freebsd-ports/2013-January/080481.html
graphics/libmng gcc 4.6.3 ISSUE undefined reference to `__stack_chk_fail_local'
it raised, when compiling for i386
arch and, yes, it's not on amd64 platform, but i386.
[...]
> This is a common problem for amd64 that affects both FreeBSD and DragonFly.
> We ended up patching the base compilers (two, gcc 4.4 and gcc 4.7) to bypass
> it.
と書いてあります。しかし
sudo apt-get -f install gcc-4.4
sudo apt-get -f install gcc-4.7
ともに成功しないので、ここに書いてあることが自分の状況を解決するのかどうかよく分かりません。
-sharedがエラーの中に見えるのと、Makefileの中に
CFLAGS = -Wall -pedantic -fPIC -fsigned-char -O3 -fomit-frame-pointer -fforce-addr -minline-all-stringops
があるので、shared object特有の問題なのかもしれませんが、よく分かりません。
__stack_chk_fail_localに関する質問として、すでに、
https://lists.ubuntu.com/archives/ubuntu-jp/2007-January/000320.html
[ubuntu-jp] stack_chk_fail_local Tue Jan 2 16:16:15 GMT 2007
がありますが、ldではなくgccを使えと言う答えでした(すでに使っています)。
こんな質問ですが、よろしくお願いいたします。
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
qdbmは、パッケージとして、インストール可能なものだと思いますが、qdbm-1.8.75 と、このバージョンにこだわる理由があるのですか?
13.04 だと、1.8.78 がインストール候補として上がります。
(ただし、データベースライブラリなので、パッケージ名は、libqdbm14,qdbm-util,ruby-qdbm等となっています)
オフライン
回答ありがとうございます。
YesKah様
qdbmはhyper estraierと言う全文検索用のアプリのmakeに必要なもので、そのmakeが目的です。
(参考) http://fallabs.com/hyperestraier/intro-ja.html#installation
hyper estraierのソースに多少手を加えているので、できればこのアプリでいきたいのです。
si様
このバージョンにしたのは、昔のUbuntu(バージョン失念)、と今Windows XP+cygwinで使えているから
という安易な考えからでした。installできなければ意味が無いと言われればそれまでです。考えが硬直していました。
> 13.04 だと、1.8.78 がインストール候補として上がります。
これは、
$ sudo apt-get install qdbm
とするとそうなると言う意味でしょうか。インストールマニュアルに記述が無かったので、apt-getの事は思いつきませんでした。
$ sudo apt-get install hyperestraier 等できるようですね(自分はソースに手を入れているのでhyper estraierはmakeしたいですが)。
しかし実行しても自分の環境では、
> $ sudo apt-get install hyperestraier
> パッケージリストを読み込んでいます... 完了
> 依存関係ツリーを作成しています
> 状態情報を読み取っています... 完了
> E: パッケージ hyperestraier が見つかりません
となります。qdbm,libqdbm14,qdbm-util,ruby-qdbmについても同じです。
前にどうしても古いアプリをインストールしたくて、/etc/apt/sources.list などをいじった記憶があるのですが、
普通の状態だとできるものでしょうか。それとも全然別の意味で『1.8.78 がインストール候補として上がります。』と
おっしゃっているのでしょうか。なにとぞご教授ください。
オフライン
> $ sudo apt-get install hyperestraier
> パッケージリストを読み込んでいます... 完了
> 依存関係ツリーを作成しています
> 状態情報を読み取っています... 完了
> E: パッケージ hyperestraier が見つかりません
> となります。qdbm,libqdbm14,qdbm-util,ruby-qdbmについても同じです。
qdbm, hyperestraier は、以前から、Ubuntuでもパッケージ作成、メンテされており、見つからないのは、変ですね?
どういったネット環境、リポジトリ設定でお使いですか?
オフライン
ubuntu12.04.3 で確認してみましたけど有るようですよ。
makoto@u1:~/Desktop$ apt-cache search qdbm libestraier-dev - a full-text search system Libraries [development] libestraier8 - a full-text search system Libraries [runtime] libqdbm++-dev - QDBM Database Libraries for C++ [development] (transitional package) libqdbm-dev - QDBM Database Libraries [development] libqdbm-java - QDBM Database Libraries for Java libqdbm-perl - QDBM Database Libraries for Perl libqdbm-ruby1.8 - QDBM Database Libraries for Ruby 1.8 (transitional package) libqdbm-ruby1.9.1 - QDBM Database Libraries for Ruby 1.9.1 (transitional package) libqdbm14 - QDBM Database Libraries without GDBM wrapper[runtime] libqdbm3++c2 - QDBM Database Libraries for C++ [runtime] (transitional package) libxqdbm-dev - QDBM Database Libraries for C++ [development] libxqdbm3c2 - QDBM Database Libraries for C++ [runtime] qdbm-doc - QDBM Database Documentation ruby-qdbm - QDBM Database Libraries for Ruby ruby-tokyocabinet - Ruby Binding of Tokyo Cabinet Database libtokyocabinet-dbg - Tokyo Cabinet データベースライブラリ群 [ランタイム] libtokyocabinet8 - Tokyo Cabinet データベースライブラリ群 [ランタイム] qdbm-cgi - QDBM Database CGI コマンド qdbm-util - QDBM データベースユーティリティ tokyocabinet-bin - Tokyo Cabinet データベースユーティリティ群 makoto@u1:~/Desktop$ apt-cache search hyperestraier hyperestraier - a full-text search system for communities libestraier-ruby - Hyper Estraier Node API Libraries for Ruby makoto@u1:~/Desktop$
オフライン
si様、makopi様
申し訳ございません。
$sudo apt-get update したら、apt-getできるようになりました。
そこで
$sudo apt-get install libqdbm14
をしてから、hyperestraier-1.4.13をmakeしようとしましたが、状況はqdbm-1.8.75をmakeしようとしたときと大体同じで、
__stack_chk_fail_local が見つかりません。
$ make
if gcc --print-prog-name=ld | egrep -i '(solaris|/ccs/|/ucb/)' > /dev/null ; \
then \
gcc -shared -Wl,-G,-h,libestraier.so.8 -o libestraier.so.8.38.0 estraier.o estmtdb.o estnode.o md5.o \
-L. -L/usr/local/lib -L/home/navi/lib -L/usr/local/lib ; \
else \
gcc -shared -Wl,-soname,libestraier.so.8 -o libestraier.so.8.38.0 estraier.o estmtdb.o estnode.o md5.o \
-L. -L/usr/local/lib -L/home/navi/lib -L/usr/local/lib ; \
fi
estraier.o: In function `est_idx_scan':
estraier.c:(.text+0x15a9): undefined reference to `__stack_chk_fail_local'
estraier.o: In function `est_enc_miss':
estraier.c:(.text+0x1718): undefined reference to `__stack_chk_fail_local'
estraier.o: In function `est_idx_add.isra.11':
estraier.c:(.text+0x27f9): undefined reference to `__stack_chk_fail_local'
estraier.o: In function `est_search_uvset.isra.14':
estraier.c:(.text+0x29d5): undefined reference to `__stack_chk_fail_local'
estraier.o: In function `est_idx_increment.part.19':
estraier.c:(.text+0x2af9): undefined reference to `__stack_chk_fail_local'
estraier.o:estraier.c:(.text+0x2e9d): more undefined references to `__stack_chk_fail_local' follow
collect2: ld はステータス 1 で終了しました
make: *** [libestraier.so.8.38.0] エラー 1hyperestraierもapt-get installしてバージョンを調べてみましたが、
/usr/include/estraier/estraier.h に
#define _EST_VERSION "1.4.13"
とあるのでバージョンは同じだと思います。
そこで新たな疑問なのですが、アプリが古ければ12.04.3 でmakeできないというのが正しければ、
apt-get install 用のバイナリはどうやって作っているのでしょうか?Live CDで古いUbuntuを用意して
そこでmakeするなどの方法でバイナリを作っても動くでしょうか?
readelf はデバッグ情報がないとコンパイラの情報も出ないようなので詳しい事が分かりません。
> ELF Header:
> (略)
> OS/ABI: UNIX - System V
とありますが、System Vは用意できません。ほかにmake環境を用意する方法あるでしょうか?
オフライン
ソースの取得なら適当なディレクトリーで
apt-get source パッケージ名
でいけます。
あとは deb のパッケージの作成になると思います。
オフライン
deb パッケージのソースを取得し、本家ソースとの、ビルドオプションを比較してみては如何でしょうか?
オフライン
makopi様、si様
レスありがとうございます。
si様 による投稿:
deb パッケージのソースを取得し、本家ソースとの、ビルドオプションを比較してみては如何でしょうか?
ビルドオプションとはMakefileの中でgccについているオプション等という意味でしょうか。
残念ながらどちらもMakefileが存在しません。configureとMakefile.inのみです。
サブディレクトリを除いたディレクトリ比較もしましたが、メインと思われるヘッダーや、cファイルのfprintfの中のURL、メールアドレスなどが、sourceforgeに変わっている、ChangeLogもメールアドレス変更だけで追加なし、configure は automake のバージョンが
本家が2.65と新しく、apt-get版は2.59です。
今見たらapt-get版のconfigure.inに
MYCFLAGS="$MYCFLAGS `pkg-config --cflags qdbm`"
の一行が加わっていました。しかしapt-getしたものもそのままでは、./configureは通りません。AC_HELP_STRINGなどの
古いキーワードが使われているので、autoconfもそのままでは通りません。もうすこし粘ってから何か報告できることがありましたら
報告します。またアドバイスがあればよろしくお願いします。
オフライン
まず、Debianパッケージの場合、ビルド時にはdebian/rulesがMakefile相当の機能を果たしますので、比較する場合はこのファイルを見るのが妥当です。
で、手元の13.10環境で次の操作をしてパッケージ作成時とほぼ同等のbuildを走らせたところ、特に問題なく完走したので、パッケージの内容に沿わせればいけるように思います。
mkdir -p work/2013/1120
cd work/2013/1120
apt-get source qdbm
apt-get build-dep qdbm
cd qdbm-1.8.78
debuild
オフライン
hito様
すぐに返事が出来なくて申し訳ございません。手順どおりにやってみたのですが、debuild の中で autoconf が実行されて結局
autoconf autoconf: Undefined macros: configure.in:103:AC_ARG_ENABLE(gdbm, AC_HELP_STRING([--disable-gdbm], configure.in:113: AC_HELP_STRING([--enable-zlib], [feature ZLIB for B+ tree and inverted index])) configure.in:124: AC_HELP_STRING([--enable-lzo], [feature LZO for B+ tree and inverted index])) configure.in:135: AC_HELP_STRING([--enable-bzip], [feature BZIP2 for B+ tree and inverted index])) configure.in:146: AC_HELP_STRING([--enable-iconv], [feature ICONV utilities])) configure.in:157: AC_HELP_STRING([--disable-warn], [hide warnings in the configuration])) configure.in:48: AC_HELP_STRING([--enable-debug], [build for debugging])) configure.in:57: AC_HELP_STRING([--enable-devel], [build for development])) configure.in:66: AC_HELP_STRING([--enable-stable], [build for stable release])) configure.in:75: AC_HELP_STRING([--enable-pthread], [use POSIX thread and make APIs thread-safe])) configure.in:85: AC_HELP_STRING([--disable-lock], [build for environments without file locking])) configure.in:94: AC_HELP_STRING([--disable-mmap], [build for environments without memory mapping])) make: *** [build-stamp] エラー 1
となります。autoconf のバージョンは2.14です(古いでしょうか)。
そこで、qdbm_1.8.78.orig.tar.gz の中の configure を使って(autoconf は2.65のようです)、qdbm-1.8.78/debian/rules の中の autoconf をコメントアウトしました。すると
dpkg-shlibdeps: error: no dependency information found for /usr/local/lib/libiconv.so.2 (used by debian/libqdbm14/usr/lib/libqdbm.so.14.14.0).
となります。
libiconviに関しては
$ sudo apt-get install iconv パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 パッケージ iconv はデータベースには存在しますが、利用できません。 おそらく、そのパッケージが見つからないか、もう古くなっているか、 あるいは別のソースからのみしか利用できないという状況が考えられます E: パッケージ 'iconv' にはインストール候補がありません
となります。やはりautoconfのバージョンをあげる必要があるでしょうか。apt-get install ではあげられません。
すると /etc/apt/sources.list をいじればいいのでしょうか。よろしくご教授ください。
オフライン
調査が不十分かもしれませんが、
autoconf のバージョンは2.14です(古いでしょうか)。
2.14 は無かった事になっている様です。
http://lists.debian.or.jp/debian-devel/ … 00036.html
少なくとも
ftp://ftp.gnu.org/gnu/autoconf/
には有りません。
これは、Cygwin で使われているのと同じバージョンですか?
オフライン
makopi による投稿:
調査が不十分かもしれませんが、
autoconf のバージョンは2.14です(古いでしょうか)。
2.14 は無かった事になっている様です。
http://lists.debian.or.jp/debian-devel/ … 00036.html
混乱させてしまってすみません。これは2.13のタイプミスでした。/var/log/apt/にも2.14がinstallされたという形跡はありませんでした。
まだ四苦八苦している途中ですが、autoconf2.13をpurgeしてinstallしなおしたら、2.69にあげることが出来ました。これでautoconfの問題はなくなったようです。
今は♯12のlibiconvの依存関係の問題で引っかかっています。また一通り調べたら書き込むかもしれません。その時はよろしくお願いします。
オフライン