referencia indefinida ‘shm_open’, ya agrega -lrt bandera aquí

Solo tengo un locking del sistema y reinstalo Ubuntu 11.10, y mi código produce este extraño error.

Escribí una muestra de código simple para probar dónde está el problema:

#include  #include  #include  #include  #include  #include  int main (void) { int i; i = shm_open ("/tmp/shared", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); printf ("shm_open rc = %d\n", i); shm_unlink ("/tmp/shared"); return (0); } 

y el comando de comstackción es

gcc -lrt test.c -o test

El error es:

 /tmp/ccxVIUiP.o: In function `main': test.c:(.text+0x21): undefined reference to `shm_open' test.c:(.text+0x46): undefined reference to `shm_unlink' collect2: ld returned 1 exit status 

Ya he agregado -lrt lib, ¿por qué aún no comstack?

Bibliotecas al final:

gcc test.c -o test -lrt

Desde las opciones de enlace de GCC :

 -iblioteca
 -l biblioteca
     Busque en la biblioteca llamada biblioteca al enlazar. 
     (La segunda alternativa con la biblioteca como argumento separado
     es solo para cumplimiento con POSIX y no se recomienda).

     Hace una diferencia dónde en el comando escribes esta opción;
     el vinculador busca y procesa bibliotecas y archivos de objetos en
     orden ellos son especificados
     Por lo tanto, `foo.o -lz bar.o 'busca en la biblioteca` z' después del archivo foo.o pero
     antes bar.o.  Si bar.o se refiere a funciones en `z ', esas funciones
     no puede ser cargado

Cambiar la línea de comstackción de

 gcc -lrt test.c -o test 

a

 gcc test.c -o test -lrt 

En la Expert C programming Página 108: Where to Put Library Options:Always put the -l library options at the rightmost end of your comstacktion command line. Pero no dice por qué, así que supongo que esto es algo así como una regla? 🙂