大家好,
遇到一个奇怪的问题,麻烦大家指导下,谢谢。:)
(1)我在DM368的ti-dvsdk_dm368-evm_4_02_00_06/上开发程序,需要用到消息队列。
(2)但是,程序在mq_open时,返回告警38,也就是 #define ENOSYS 38 /* Function not implemented */
Open MsgQueue error!t
he errno = 38
(3)这个定义理解是没实现。但是,在编译链接时也没有告警。arm工具链对应的librt定义如下后面所列出。
(4)相同的代码在服务器编译,执行,当然没有问题。
将实验代码简化如下:
#include <stdio.h>
#include <unistd.h>
#include "ushellagent.h"
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <mqueue.h>
#include <errno.h>
/*****************************************************************************
* filename : ushellver
* function : ushellver
* author version date note
* feller 1.0 20150928 create
******************************************************************************/
int ushellver( int a , int b )
{
printf( USHELLAGENT_VER );
return 0;
}
/*****************************************************************************
* filename : main
* function : main
* author version date note
* feller 1.0 20150728 create
******************************************************************************/
int main( void )
{
int a = 0x35;
int b = 0xfe;
int iReturn = -1;
ushellver( a, b );
// = ushell_init();
//attr.mq_maxmsg = IPC_MSG_NUM;
//attr.mq_msgsize = IPC_MSG_LENTH;
iReturn = mq_open("/ushell_test", O_RDONLY | O_CREAT,666,NULL);
if ((mqd_t)-1 == iReturn)
{
printf("Open MsgQueue error!");
printf( "the errno = %d\n", errno );
//return iResult;
}
if( 0 == iReturn )
{
printf( "\nushell_init ok (~!~)\n" );
}
else
{
printf( "\nushell_init error\n" );
return 0;
}
while(1)
{
usleep(1000000);
}
return 0;
}
(7)ARM交叉工具链的librt库定义
./arm-none-linux-gnueabi/libc/thumb2/lib/librt.so.1
./arm-none-linux-gnueabi/libc/thumb2/lib/librt-2.8.so
./arm-none-linux-gnueabi/libc/thumb2/usr/lib/librt.so
./arm-none-linux-gnueabi/libc/thumb2/usr/lib/librt.a
./arm-none-linux-gnueabi/libc/lib/librt.so.1
./arm-none-linux-gnueabi/libc/lib/librt-2.8.so
./arm-none-linux-gnueabi/libc/armv4t/lib/librt.so.1
./arm-none-linux-gnueabi/libc/armv4t/lib/librt-2.8.so
./arm-none-linux-gnueabi/libc/armv4t/usr/lib/librt.so
./arm-none-linux-gnueabi/libc/armv4t/usr/lib/librt.a
./arm-none-linux-gnueabi/libc/usr/lib/librt.so
./arm-none-linux-gnueabi/libc/usr/lib/librt.a