当前位置: 技术问答>linux和unix
大家帮我看一下下面的程序,Posix共享内存方面的,为什么编译的时候有问题,谢谢
来源: 互联网 发布时间:2015-11-07
本文导语: 程序代码: #include "basic.h" #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) int main(int argc, char **argv) { int c, fd, flags; char *ptr; off_t length; flags = O_RDWR | O_CREAT; while ( (c = getopt(argc, argv, "e")) != -1) { swit...
程序代码:
#include "basic.h"
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main(int argc, char **argv)
{
int c, fd, flags;
char *ptr;
off_t length;
flags = O_RDWR | O_CREAT;
while ( (c = getopt(argc, argv, "e")) != -1) {
switch (c) {
case 'e':
flags |= O_EXCL;
break;
}
}
if (optind != argc - 2)
printf("usage: shmcreate [ -e ] ");
length = atoi(argv[optind + 1]);
fd = shm_open( argv[optind], flags, FILE_MODE );
ftruncate(fd, length);
ptr = mmap( NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
exit(0);
}
在solaris下,编译错误:
gcc -c -Wall -ggdb -I -I. -I./include -I/LIB/include -I/include -I/LIB/include -L -L. -L/LIB/lib -L/LIB/lib -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT pmen.cpp
pmen.cpp: In function `int main(int, char **)':
pmen.cpp:25: implicit declaration of function `int shm_open(...)'
*** Error code 1
make: Fatal error: Command failed for target `pmen.o'
我得makfile文件:
LIBFILE = -lrt -lpthread -lsocket -lnsl
大家帮我看看什么原因,谢谢
#include "basic.h"
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main(int argc, char **argv)
{
int c, fd, flags;
char *ptr;
off_t length;
flags = O_RDWR | O_CREAT;
while ( (c = getopt(argc, argv, "e")) != -1) {
switch (c) {
case 'e':
flags |= O_EXCL;
break;
}
}
if (optind != argc - 2)
printf("usage: shmcreate [ -e ] ");
length = atoi(argv[optind + 1]);
fd = shm_open( argv[optind], flags, FILE_MODE );
ftruncate(fd, length);
ptr = mmap( NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
exit(0);
}
在solaris下,编译错误:
gcc -c -Wall -ggdb -I -I. -I./include -I/LIB/include -I/include -I/LIB/include -L -L. -L/LIB/lib -L/LIB/lib -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT pmen.cpp
pmen.cpp: In function `int main(int, char **)':
pmen.cpp:25: implicit declaration of function `int shm_open(...)'
*** Error code 1
make: Fatal error: Command failed for target `pmen.o'
我得makfile文件:
LIBFILE = -lrt -lpthread -lsocket -lnsl
大家帮我看看什么原因,谢谢
|
你没包含头文件吧
implicit declaration
implicit declaration
|
没有shm_open这个函数
|
没有shm_open这个函数
---
为什么?
---
为什么?
|
solaris实现了posix标准的共享内存操作的。
这个函数应该有。
要不你再到头文件里去找找,我没有用过这个solaris系统,不能确定。
这个函数应该有。
要不你再到头文件里去找找,我没有用过这个solaris系统,不能确定。
|
在G++3.2(好像)以上,编译器对原型检查很严的说
自己man一下shm_open不就知道该包含哪个头文件了么?
自己man一下shm_open不就知道该包含哪个头文件了么?