Was ist der üblicher Weg, autoconf Link in Solaris-Netzwerkbibliotheken zu machen?

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

  •  06-07-2019
  •  | 
  •  

Frage

Unter Solaris wenn Sie ein Programm erstellen, die Buchsen verwendet, müssen Sie es mit -lnsl -lsocket verknüpfen. Viele dieser Programme wurden ursprünglich für Linux geschrieben (wobei keine zusätzlichen Bibliotheken benötigt werden) und daher nicht überprüfen für diese Bibliotheken in ihren configure-Skripte, auch wenn das eine ziemlich einfache Addition ist. So etwas wie diese (nicht getestet):

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

Gibt es einen kanonischen Weg, um diese Überprüfung zu tun? Vielleicht sogar in der autoconf-Distribution? Sie würden denken, dass es eine ziemlich weit verbreitete Notwendigkeit, das ist, aber Google würde es mir nicht sagen.

War es hilfreich?

Lösung

Ich denke, die am nächsten zu ein kanonischen Weg, dies zu überprüfen die Autoconf Archiv :

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

Andere Tipps

Ich kann keine fertigen Code aus der Spitze von meinem Kopf erinnern, aber Sie wollen in der Regel überprüfen, ob Sie ein Programm verknüpfen können zuerst die gethostbyname() Funktion ohne zusätzliche Libs aufrufen. Nur wenn das nicht funktioniert, sollten Sie die nsl Bibliothek versuchen.

Ähnliches gilt z.B. für die m Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top