自己写了一个比较短的 Linux 脚本,但运行时出现 segmentation fault ,请帮忙看一下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己写了一个比较短的 Linux 脚本,但运行时出现 segmentation fault ,请帮忙看一下相关的知识,希望对你有一定的参考价值。
先悬赏 50 分,如果能解决问再追加 50 分。程序如下:
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
int main()
typedef enum
NFC_RF_TECHNOLOGY_A,
NFC_RF_TECHNOLOGY_B,
NFC_RF_TECHNOLOGY_F,
phNxpNfc_Tech_t;
typedef enum
NFC_BIT_RATE_106,
NFC_BIT_RATE_212,
NFC_BIT_RATE_424,
NFC_BIT_RATE_848,
phNxpNfc_Bitrate_t;
typedef unsigned short uint16_t;
void *pHandle=NULL;
uint16_t c;
uint16_t (*pFunc)(phNxpNfc_Tech_t,phNxpNfc_Bitrate_t);
pHandle = dlopen("/system/lib/nfc_nci_pn547.default.so",RTLD_LAZY);
if(!pHandle)
printf("load lib failed\n");
goto err;
pFunc = (uint16_t (*)(phNxpNfc_Tech_t,phNxpNfc_Bitrate_t))dlsym(pHandle,"phNxpNciHal_PrbsTestStart");
if(!pFunc)
printf("can't find phNxpNciHal_PrbsTestStart\n");
goto err;
if(dlerror())
goto err;
printf("phNxpNciHal_PrbsTestStart address %p\n",pFunc);
c=pFunc(0,1);//如果把这句注掉可以运行,但不知道这句为什么不行?????????
return 0;
err:
dlclose(pHandle);
return -1;
运行结果如下:
从提示看调用pFunc(0,1)时指针并不是NULL,下面提示segmentation fault 是否是pFunc()内部的问题?追问
我主要的目的是调用库文件中的 phNxpNciHal_PrbsTestStart 函数,这个函数应该不会有问题,是官方提供的文件,它的原型如下:uint16_t phNxpNciHal_PrbsTestStart (phNxpNfc_Tech_t tech, phNxpNfc_Bitrate_t bitrate)。请问是否有其它建议?
追答从代码上看没错,思路就换到调用环境上来。你确定pFunc调用前不需要别的初始化动作?
pFunc = (uint16_t (*)(phNxpNfc_Tech_t,phNxpNfc_Bitrate_t))dlsym(pHandle,"phNxpNciHal_PrbsTestStart");
这句解析一下
PUPPY LINUX下SHELL脚本如何单击自动执行? 目前写了个脚本,只能右键单击,在弹出菜单里选“在终端下运行
脚本名abc.sh
内容格式如下:
#/bin/bash
XXXXX命令
如何能够实现像其他桌面上的图标一样,左键单击,就会自动执行呢?而不是右键终端运行
我想应该是大同小异吧
桌面空白处,右键点击,有个“创建启动器”
点击这个
类型选择“终端应用程序”
名称那里随便填
命令填你shell脚本的全路经(包括文件名),如果需要启动参数,后面再跟上参数即可
最后一个“注释”比那个“名称”还随意,写不写都行
图标是默认的,如果想换个自己喜欢的图标,在创建的时候点击那个图标即可 参考技术A 桌面的图标是专有的格式,我记得可以生成(桌面右键-》新建某个东西?忘了),类似 Windows 的快捷方式的东西。 参考技术B 可以的,你选择运行的程序,把程序拖入对话框就行了。可以来空间找我。
以上是关于自己写了一个比较短的 Linux 脚本,但运行时出现 segmentation fault ,请帮忙看一下的主要内容,如果未能解决你的问题,请参考以下文章
shell真正解决syntax error:unexpected end of file?
PUPPY LINUX下SHELL脚本如何单击自动执行? 目前写了个脚本,只能右键单击,在弹出菜单里选“在终端下运行