[[!meta copyright="Copyright © 2007, 2008 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] ## Howto write a Hurd library Build the Hurd sources: ------------------------ Refer to this [[hurd/building/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 . 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 . 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