Howto write a Hurd library
Build the Hurd sources:
Refer to this example.
Create the library files:
Create a directory, say, libhello in the Hurd sources directory.
Create a lhello.h header file:
/* lhello.h - Example library header file.
Copyright (C) 2006 Free Software Foundation, Inc.
Written by Shakthi Kannan <shaks@shakthimaan.com>.
This file is part of the GNU Hurd.
The GNU Hurd is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2, or (at
your option) any later version.
The GNU Hurd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with the GNU Hurd; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef _HURD_HELLO_H
#define _HURD_HELLO_H 1
struct hello
{
int x;
};
#endif /* _HURD_HELLO_H */
Replace filename, year, author name and e-mail address appropriately.
Create a lhello.c file:
/* lhello.c - Example library .c file.
Copyright (C) 2006
Free Software Foundation, Inc.
Written by Shakthi Kannan <shaks@shakthimaan.com>.
This file is part of the GNU Hurd.
The GNU Hurd is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
The GNU Hurd is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the GNU Hurd; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "lhello.h"
void
print_hello (void)
{
struct hello example;
example.x = 2;
printf ("foo and bar are %d words!\n", example.x);
}
Replace header file year, author name and e-mail address appropriately.
Create a Makefile
#
# Copyright (C) 2006 Free Software Foundation, Inc.
#
# This file is part of the GNU Hurd.
#
# The GNU Hurd is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2, or (at
# your option) any later version.
#
# The GNU Hurd is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
dir := libhello
makemode := library
libname := libhello
SRCS = lhello.c
installhdrs = lhello.h
LCLHDRS = $(installhdrs)
OBJS = $(SRCS:.c=.o)
include ../Makeconf
Update the Makeconf file:
Add libhello to lib-subdirs target in the top-level Makefile in the Hurd sources.
cd build
../configure
make
Testing the library
Write a file, say, foo.c:
/* foo.c */
#define _GNU_SOURCE
int
main (int argc, char *argv[])
{
print_hello();
return 0;
}
Static compilation and linking method:
gcc -g -o foo foo.c -L/path/to/libhello -lhello -static
Run the example:
./foo
Compilation and dynamic linking method:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/libhello
gcc -g -o foo foo.c -L/path/to/libhello -lhello
where /path/to/libhello = /path/to/hurd/build/libhello
Run the example:
./foo
