Я вытаскиваю свои волосы, пытаясь понять, почему это не работает на моей системе 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;
}
Как вы можете видеть, я включил правильный заголовок файлы для этих вызовов, и он все еще говорит, что ссылки не определены. Я смог успешно использовать это в другой программе, поэтому я полностью исчерпал идеи о том, почему это не работает в этом случае.
Редактировать: Это системный вызов. Я предполагаю, что это не имеет значения.
Попробуйте включить -lpthread при компиляции – ChiaraHsieh
Возможно, я делаю это неправильно (поскольку я не знаю, где на самом деле это поставить), но я не думаю, что это работает. Когда я делаю «clang program.c -lpthread», он говорит «не может найти -lpthread»; когда я делаю «clang program.c -c», он компилируется без ошибок, но если я попытаюсь вручную выполнить «ld program.o» (с или без -lpthread), я получаю ошибки, подобные приведенным выше. И только для того, чтобы отметить, вышеупомянутые ошибки заключались в компиляции через Makefile, уже присутствующий в этом системном каталоге, используя только «make». –
Ошибка на самом деле не является ошибкой компиляции - это ошибка ссылки. Это выглядит нормально, за исключением того, что библиотека, которая удовлетворяет вызовам, не связана. Вы уверены, что в Minix должен быть один? – wallyk