2013-03-28 3 views
0

Я вытаскиваю свои волосы, пытаясь понять, почему это не работает на моей системе Minix.C - Невозможно получить shmget/shmat для компиляции

Когда я пытаюсь скомпилировать свою программу, C, я получаю следующее сообщение об ошибке:

#make 
     link pm/pm 
program.o: In function `do_function': 
program.c:(.text+0x1e): undefined reference to `shmget' 
program.c:(.text+0x36): undefined reference to `shmat' 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
*** Error code 1 

Stop. 
make: stopped in /usr/src/servers/pm 
# 

Это мой код:

#include <sys/shm.h> 
#include <sys/types.h> 
#include <sys/ipc.h> 
#include <sys/stat.h> 
/* Some other includes here */ 

typedef struct { 
    //struct elemLi *next; 
    //elem sem; 
    int ref_count; 
} elemLi; 

int do_function(void){ 
    int segment_id; //Shared Memory ID 
    struct elemLi* sli; //Shared Memory Pointer 
    segment_id = shmget(IPC_PRIVATE, sizeof(elemLi),0660 | IPC_CREAT); 
    sli = (struct elemLi *)shmat(segment_id,NULL,0); 
    return -1; 
} 

Как вы можете видеть, я включил правильный заголовок файлы для этих вызовов, и он все еще говорит, что ссылки не определены. Я смог успешно использовать это в другой программе, поэтому я полностью исчерпал идеи о том, почему это не работает в этом случае.

Редактировать: Это системный вызов. Я предполагаю, что это не имеет значения.

+0

Попробуйте включить -lpthread при компиляции – ChiaraHsieh

+0

Возможно, я делаю это неправильно (поскольку я не знаю, где на самом деле это поставить), но я не думаю, что это работает. Когда я делаю «clang program.c -lpthread», он говорит «не может найти -lpthread»; когда я делаю «clang program.c -c», он компилируется без ошибок, но если я попытаюсь вручную выполнить «ld program.o» (с или без -lpthread), я получаю ошибки, подобные приведенным выше. И только для того, чтобы отметить, вышеупомянутые ошибки заключались в компиляции через Makefile, уже присутствующий в этом системном каталоге, используя только «make». –

+0

Ошибка на самом деле не является ошибкой компиляции - это ошибка ссылки. Это выглядит нормально, за исключением того, что библиотека, которая удовлетворяет вызовам, не связана. Вы уверены, что в Minix должен быть один? – wallyk

ответ

0

Спасибо за помощь всем, это похоже был недостающая библиотека в компоновщике. Я добавил libc, используя -lc, в Makefile, и теперь он, похоже, компилируется в порядке.

Смежные вопросы