[opensuse-ja] -lwrap をlinkできないけどどうするのが正しいのでしょう? (was: Released FreeWnn 1.1.1-a022)
openSUSE12.3と13.1 Milestone 3 64 bit版での話です。 libwrapをリンクしようとしています。 しかし以下のエラーが出てlink出来ません。
gcc junk.c -lwrap usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: -lwrap が見つかりません collect2: error: ld returned 1 exit status
cat junk.c int main() { retunr 0; }
libmはリンクに成功します。
gcc junk.c -lm ls a.out
/lib64/libwrap.so.0や/lib64/libwrap.so.0.7.6 はあるのですがバージョン番号の無いlibwrap.soが無いので linkに失敗します。
gcc junk.c /lib64/libwrap.so.0 としてやればリンクはできます。しかし美しくありません。
1) libm.soはバージョン番号の無い無印がsymlinkとして存在するのに libwrap.soは何故ないのでしょうか? 2) 自分でlibwrap.soをsymlinkとして作るべきでしょうか? 3) バージョン番号の無い無印*.soが無い共有オブジェクトというのは たまに見かけますが、 そういう仕様なのか、bugなのかどちらでしょうか? 4) 仕様だとしてどのようにリンクするのが正しいのでしょうか? UNIX系OSを長く使っていますが、いまだにこれだという答えを 知らないで悩んでいます。 とりあえずsshdのソースを見て(これもlibwrap.so.0をlinkしているので) どうしているのか調べてみます。
ldd /usr/sbin/sshd linux-vdso.so.1 (0x00007fffc2bfe000) libwrap.so.0 => /lib64/libwrap.so.0 (0x00007faf2072e000) libpam.so.0 => /lib64/libpam.so.0 (0x00007faf2051f000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007faf202fb000) libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007faf1ff10000) libutil.so.1 => /lib64/libutil.so.1 (0x00007faf1fd0d000) libz.so.1 => /lib64/libz.so.1 (0x00007faf1faf7000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007faf1f8bb000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007faf1f675000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007faf1f3a6000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007faf1f1a2000) libaudit.so.1 => /usr/lib64/libaudit.so.1 (0x00007faf1ef85000) libc.so.6 => /lib64/libc.so.6 (0x00007faf1ebd4000) libdl.so.2 => /lib64/libdl.so.2 (0x00007faf1e9d0000) libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007faf1e766000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007faf1e54a000) /lib64/ld-linux-x86-64.so.2 (0x00007faf20939000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007faf1e317000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007faf1e10a000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007faf1df06000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007faf1dcef000)
2013年8月6日 7:59 1xx <itsango@gmail.com>:
とりあえず私もpackage作りを試みてみたいと思います。
-- 1xx <ItSANgo@gmail.com> <https://twitter.com/ItSANgo> <http://d.hatena.ne.jp/Itisango/> -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-ja+owner@opensuse.org
2013/8/7 1xx <itsango@gmail.com>:
openSUSE12.3と13.1 Milestone 3 64 bit版での話です。
libwrapをリンクしようとしています。 しかし以下のエラーが出てlink出来ません。
この件、自己解決しました。 sudo zypper si openssh をしたときに、 一緒に入ってきたtcpd-devel-7.6-880.3.x86_64に /usr/lib64/libwrap.so(/lib64/libwrap.so.0.7.6へのsymlink)が 入っていました。
2013年8月6日 7:59 1xx <itsango@gmail.com>:
とりあえず私もpackage作りを試みてみたいと思います。
つまり-lwrapをlinkするpackageを作るときにはtcpd-develを BuildRequires: tcpd-devel をしないといけないということでしょうか? -- 1xx <ItSANgo@gmail.com> <https://twitter.com/ItSANgo> <http://d.hatena.ne.jp/Itisango/> -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-ja+owner@opensuse.org
武山です
つまり-lwrapをlinkするpackageを作るときにはtcpd-develを BuildRequires: tcpd-devel をしないといけないということでしょうか?
はい、その通りです。 多くのケースでは、 ./configure でエラーになるか、 ヘッダーファイルが見つからないでコンパイルエラーになる場合が 多いのですが…。 またパッケージングするときも、lib*.so は開発時にしか使わないので、 -devel パッケージに含めるようにしないといけません。 (2013/08/07 3:27), 1xx wrote:
2013/8/7 1xx <itsango@gmail.com>:
openSUSE12.3と13.1 Milestone 3 64 bit版での話です。
libwrapをリンクしようとしています。 しかし以下のエラーが出てlink出来ません。
この件、自己解決しました。 sudo zypper si openssh をしたときに、 一緒に入ってきたtcpd-devel-7.6-880.3.x86_64に /usr/lib64/libwrap.so(/lib64/libwrap.so.0.7.6へのsymlink)が 入っていました。
2013年8月6日 7:59 1xx <itsango@gmail.com>:
とりあえず私もpackage作りを試みてみたいと思います。
つまり-lwrapをlinkするpackageを作るときにはtcpd-develを BuildRequires: tcpd-devel をしないといけないということでしょうか?
-- Fuminobu TAKEYAMA -- To unsubscribe, e-mail: opensuse-ja+unsubscribe@opensuse.org To contact the owner, e-mail: opensuse-ja+owner@opensuse.org
participants (2)
-
1xx
-
Fuminobu TAKEYAMA