autoconf
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: functions in different libraries on different OSes.


From: Earnie Boyd
Subject: Re: functions in different libraries on different OSes.
Date: Wed, 09 Oct 2002 19:39:00 -0400
User-agent: Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.1) Gecko/20020826

Russ Allbery wrote:
Dan Kegel <address@hidden> writes:


Standard practice is probably to always write


#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif


There's no need to check for the existance of <sys/types.h> unless you're
attempting portability far beyond that any normal software package will
need.  It exists on pretty much any modern platform and nearly all
obsolete ones.


True for Windows.


#if HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif


Likewise here; if it has the socket functions, it will have
<sys/socket.h>.


Not true for windows, it uses either winsock.h or winsock2.h depending on the windows socket version level you want to support. Typically this will be winsock2.h which is for the ws2_32 library while winsock.h is for the wsock32 library. The current compilers support ws2_32 by default, i.e.: when including windows.h you get winsock2.h by default.


One of the reasons for this is that it uses the socket()
function. Under FreeBSD this is in libc, and requires the following
header files to be included:


    #include <sys/types.h>
    #include <sys/socket.h>


The same is also true of GNU/Linux.


However, under Solaris (SunOS 5.6) you must compile againt -lxnet and
include only


    #include <sys/socket.h>


It's harmless to include <sys/types.h> as well.

You probably don't want -lxnet.  You probably want -lsocket.  Don't pay
too much attention to the Solaris man pages unless you're sure you have
the right section.


There may be other methods of getting socket() on other OSes, for all I
know.


What is the correct way to diagnose how to get socket(), or any other
function, on a given OS, and to build the software appropriately, using
autoconf?


Always include <sys/types.h> and <sys/socket.h>.  Then use something like
this, which should work pretty well:

dnl The rat's nest of networking libraries.  The common cases are not to
dnl need any extra libraries, or to need -lsocket -lnsl.  We need to avoid
dnl linking with libnsl unless we need it, though, since on some OSes where
dnl it isn't necessary it will totally break networking.  Unisys also
dnl includes gethostbyname in libsocket but needs libnsl for socket().
AC_SEARCH_LIBS(gethostbyname, nsl)
AC_SEARCH_LIBS(socket, socket, ,
    [AC_CHECK_LIB(nsl, socket, LIBS="$LIBS -lsocket -lnsl", , -lsocket)])


You'll need to modify this for windows support.

Earnie.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]