- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在绞尽脑汁地想弄清楚为什么这在我的 Minix 系统上不起作用。
当我尝试编译 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;
}
正如您所看到的,我已经为这些调用包含了正确的头文件,但它仍然说引用未定义。我能够在另一个程序中成功地使用它,所以我完全不知道为什么这在这种情况下不起作用。
编辑:这是在系统调用内。我认为这没有什么区别。
最佳答案
感谢大家的帮助,看起来链接器中缺少一个库。我使用 -lc
添加了 libc 到 Makefile,现在它似乎可以正常编译。
关于C - 无法编译 shmget/shmat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672587/
我有这段代码: if ((shmid = shmget(key, 512, IPC_CREAT | 0666)) 之后,您应该可以将其创建得更大一些。 关于c++ - shmget 大小限制问题,我
我正在尝试学习 IPC UNIX API,特别是共享内存。我已经创建了这个试图访问共享内存段或创建共享内存段的小程序。 这是我的做法: gcc -Wall -Wextra *.c # in one t
#include #include #include #include #include #include #include int main() { int i=0;
我正在编写一个简单的程序来分配共享内存,下面是shmget的示例代码, #define SHM_SIZE 1024 main(int argc,char **argv) { int s
我正在绞尽脑汁地想弄清楚为什么这在我的 Minix 系统上不起作用。 当我尝试编译 C 程序时,出现以下错误: #make link pm/pm program.o: In funct
int shmCreate(int id, int size) { int shmid key_t key; if ((key = ftok(".", id)) == -1)
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在尝试创建两组共享内存段。一个用于存储整数,另一个用于存储字符串。当我为我的整数创建共享内存段时,我在第二次 shmget 调用中不断收到错误消息。 keyS=5678; keyI=6789;
当我在下面的代码中运行 shmget 时,它返回一个值 -1,我不确定为什么会这样。其他一切似乎都运行良好。该代码只是应该从命令行获取几位数字,然后为它们创建共享内存。数字范围从 0 到 9。 #in
我创建了两个进程。其中一个创建共享内存块,另一个尝试读取它。此代码没有编译错误,但不知何故进程 2 的行为很奇怪。 过程 1: #include #include #include #inclu
我尝试将 shmget 与二维数组一起使用。这是我的代码: char **array; key_t key; int size; int shm_id; int i = 0; void *addr;
HugeTLB - Large Page Support in the Linux Kernel #include #include #include #include #define MB_
我正在使用 shmget 在我的 Linux 项目进程之间共享数据。 int shmget(key_t key, size_t size, int shmflg); 但是,任何其他程序也可以调用shm
在生产者流程中,我有以下内容。 说 MEMKEY 为 key_t 234500,并且 *shared_ring 是指向正在共享的数据结构 (donut_ring) 的指针。 int shmid, se
我需要一些有关此代码的帮助。 我在共享段中创建了一个struct msg_t,并在另一个段中创建了一个简单的字符串。在此方法中,首先附加两个段,然后要初始化字符串。然后我尝试将指向该字符串的指针(在第
使用以下参数调用: shmget(IPC_PRIVATE, sizeof(int), 0600); 我正在尝试确定将分配多少字节给共享内存块? 我认为它与 PAGE_SIZE 有关(在 32 位操作系
int shmid; int* locat; //create shared memory segment shmid = shmget(6666, size, 0666); if (shmid <
我有一个关于 C 中的 shmget() 函数的快速问题。该程序非常简单。它要求用户输入一个 shmid,然后输出 key 、模式、所有者等。 我正在使用 buffer->shm_perm.mode
在下面的示例中,我尝试使用 shmget 为 1 个整数和 10 个 foo 结构 分配内存并尝试线性访问它们。但是,它会因“地址边界错误”而出错。 对于 MacOS 系统(但在 Linux 上应该相
好的,所以我有一个字符串数组 char array[4][20]; //initialized strcpy(array[0], "PERSON1"); strcpy(array[1], "PERSO
我是一名优秀的程序员,十分优秀!