主题 : QQ2440无法使用POSIX IPC 中的sem_init 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 266
精华: 0
发帖: 22
金钱: 125 两
威望: 25 点
综合积分: 44 分
注册时间: 2008-03-11
最后登录: 2017-09-13
楼主  发表于: 2010-11-16 21:42

 QQ2440无法使用POSIX IPC 中的sem_init

kernel和root我分别加载默认光盘里的images

root_default.img
        - 缺省安装的文件系统映象文件, 采用基于arm-linux-gcc-3.4.1的函数库
zImage_s35
        - 支持三星3.5寸屏的内核文件


但是系统启动后,我没有在/lib下发现librt动态库,后我自己从arm-linux-gcc 3.4.1中将librt-2.3.2.so拷入开发板中的/lib,并作了连接。

但我发现该系统,不支持POSIX IPC semphore函数。我写了一个测试程序,就发现无法支持sem_init

测试程序如下:
复制代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h>
  4. #include <sys/mman.h>
  5. #include <semaphore.h>
  6. int main(int argc,char **argv)
  7. {
  8.     sem_t test1;
  9.     if ( sem_init(&test1,1, 0 ) == -1 ) {
  10.         printf("Semaphore init error\n");
  11.     }
  12.     else {
  13.          sem_destroy(&test1);
  14.         printf("Semaphore test OK\n");            
  15.     }
  16. }


我发现可以支持shm_open共享内存。但不支持匿名POSIX 信号灯。请高人看下到底是内核的问题,还是glib库,或者编译链的问题呢?

后续:后来我重新编译了内核,加上了POSIX message选项,但还是不行。运行上述程序后,显示Semaphore init error

有人知道是什么原因吗?或如何解决呢?