¿Cuál es la forma canónica de hacer un enlace de autoconf en las bibliotecas de red de Solaris?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

En Solaris, cuando compila un programa que usa sockets, debe vincularlo con -lnsl -lsocket . Muchos de estos programas se escribieron originalmente para Linux (donde no se necesitan bibliotecas adicionales) y, por lo tanto, no verifican estas bibliotecas en sus scripts de configuración, a pesar de que es una adición bastante simple. Algo como esto (no probado):

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

¿Hay alguna forma canónica de hacer esta verificación? ¿Quizás incluso incluido en la distribución de autoconf? Te imaginas que hay una necesidad bastante extendida de eso, pero Google no me lo dijo.

¿Fue útil?

Solución

Creo que lo más cercano a una forma canónica de verificar esto es el macro AX_LIB_SOCKET_NSL del Autoconf Archive :

# ===========================================================================
#        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])])
])

Otros consejos

No puedo recordar ningún código terminado en la parte superior de mi cabeza, pero por lo general desea verificar si puede vincular un programa que llame a la función gethostbyname () sin libs adicionales primero. Solo si eso falla, desea probar la biblioteca nsl .

Se aplican cosas similares, p. para la biblioteca m .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top