Solarisネットワークライブラリでautoconfリンクを作成する標準的な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/1630225

  •  06-07-2019
  •  | 
  •  

質問

Solarisでは、ソケットを使用するプログラムをコンパイルするとき、 -lnsl -lsocket とリンクする必要があります。そのようなプログラムの多くはもともとLinux用に作成されたもので(追加のライブラリは不要)、そのため、かなり単純な追加であっても、configureスクリプトでこれらのライブラリをチェックしません。次のようなもの(未テスト):

AC_SEARCH_LIBS(gethostbyname, nsl, , AC_MSG_ERROR([gethostbyname not found]))
AC_SEARCH_LIBS(connect, socket, , AC_MSG_ERROR([connect not found]))

このチェックを行う標準的な方法はありますか? autoconfディストリビューションに含まれているかもしれません。その必要性はかなり広まっていると想像できますが、Googleからは言われません。

役に立ちましたか?

解決

i これに最も近い標準的な方法は、 Autoconfアーカイブの「> AX_LIB_SOCKET_NSL マクロ:

# ===========================================================================
#        http://www.nongnu.org/autoconf-archive/ax_lib_socket_nsl.html
# ===========================================================================
#
# SYNOPSIS
#
#   AX_LIB_SOCKET_NSL
#
# DESCRIPTION
#
#   This macro figures out what libraries are required on this platform to
#   link sockets programs.
#
#   The common cases are not to need any extra libraries, or to need
#   -lsocket and -lnsl. We need to avoid linking with libnsl unless we need
#   it, though, since on some OSes where it isn't necessary it will totally
#   break networking. Unisys also includes gethostbyname() in libsocket but
#   needs libnsl for socket().
#
# LICENSE
#
#   Copyright (c) 2008 Russ Allbery <rra@stanford.edu>
#   Copyright (c) 2008 Stepan Kasal <kasal@ucw.cz>
#   Copyright (c) 2008 Warren Young <warren@etr-usa.com>
#
#   Copying and distribution of this file, with or without modification, are
#   permitted in any medium without royalty provided the copyright notice
#   and this notice are preserved.

AU_ALIAS([LIB_SOCKET_NSL], [AX_LIB_SOCKET_NSL])
AC_DEFUN([AX_LIB_SOCKET_NSL],
[
        AC_SEARCH_LIBS([gethostbyname], [nsl])
        AC_SEARCH_LIBS([socket], [socket], [], [
                AC_CHECK_LIB([socket], [socket], [LIBS="-lsocket -lnsl $LIBS"],
                [], [-lnsl])])
])

他のヒント

頭の上の完成したコードを思い出せませんが、通常、最初に余分なライブラリなしで gethostbyname()関数を呼び出すプログラムをリンクできるかどうかを確認する必要があります。それが失敗した場合にのみ、 nsl ライブラリを試してください。

同様のことが当てはまります。 m ライブラリの場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top