自己写了一个比较短的 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");

这句解析一下

参考技术A 纯搬运:http://wenku.baidu.com/link?url=4FAuh-kn25Reiy0i9QVOLqMoejz5Z8LyyKi6dN1wxXwT2RaPIfq8rze4IHserx-1v8XPJetBRlPHLs-lTWO3JR7rttf7nDu1bpiqDrhtLJC

PUPPY LINUX下SHELL脚本如何单击自动执行? 目前写了个脚本,只能右键单击,在弹出菜单里选“在终端下运行

脚本名abc.sh
内容格式如下:
#/bin/bash
XXXXX命令

如何能够实现像其他桌面上的图标一样,左键单击,就会自动执行呢?而不是右键终端运行

我这里是Ubuntu
我想应该是大同小异吧
桌面空白处,右键点击,有个“创建启动器”
点击这个
类型选择“终端应用程序”
名称那里随便填
命令填你shell脚本的全路经(包括文件名),如果需要启动参数,后面再跟上参数即可
最后一个“注释”比那个“名称”还随意,写不写都行
图标是默认的,如果想换个自己喜欢的图标,在创建的时候点击那个图标即可
参考技术A 桌面的图标是专有的格式,我记得可以生成(桌面右键-》新建某个东西?忘了),类似 Windows 的快捷方式的东西。 参考技术B 可以的,你选择运行的程序,把程序拖入对话框就行了。可以来空间找我。

以上是关于自己写了一个比较短的 Linux 脚本,但运行时出现 segmentation fault ,请帮忙看一下的主要内容,如果未能解决你的问题,请参考以下文章

shell真正解决syntax error:unexpected end of file?

PUPPY LINUX下SHELL脚本如何单击自动执行? 目前写了个脚本,只能右键单击,在弹出菜单里选“在终端下运行

仅在以非交互方式运行 bash 脚本时出现错误“cat: write error: Broken pipe”

25个shell脚本代码分享,日常工作够用了

Linux一键加固自动化脚本,合适自己才是最好的

linux如何创建 shell脚本,创建了shell但保存不了