linux下操作问题集合

===========================================================

1. 问题:编译,生成和安装库文件(库文件安装到"/usr/local/lib")之后,程序报"Cannot find xxxx",找不到库文件;

原因:linux中默认库路径是不包含"/usr/local/lib"的,需要手动添加;

解决方法:(修改配置"cd /etc/ld.so.conf"文件,添加路径)。


===========================================================

2. 问题:使用虚拟机+centos系统+交叉编译工具(arm-none-linux-gnueabi)编译生成数据库sqlite3的库文件,并编写splite3的测试C程序。通过挂载到arm开发板上,将数据库文件拷贝到对应的目录之后。在挂载目录(/mnt/)运行测试程序,数据库报"database is locked";

原因:不详;一番搜索之后,猜想可能和系统内核文件锁有关;

解决方法:将测试程序拷贝到其他目录下运行(不要在挂载目录下运行),测试程序运行正常,数据库不再报错,成功创建数据库并插入数据。


===========================================================

3. 问题:linux环境,如果把某个功能模块编译成一个静态库文件(.a文件), 但是这个库文件里面,用到了另外一个静态库文件的某些接口函数。例如,有两个.a   libx.a 里面需要调用liby.a的接口函数;
解决方法:只需要包含相应的头文件即可。生成目标文件是时候不需要链接.,只有生成可执行程序时才需要链接;将代码编译生成libx.a的时候,不需要liby.a的,只需要y里面的头文件即可;

但是,当给调用者使用libx.a的时候,必须都加上去,也就是-lx -ly,   不能够只有-lx 。
(而且注意顺序,-ly -lx都不行

 

===========================================================

4. 问题:linux环境下,如果有两个程序同时打开同一个串口,两个程序都可以成功打开该串口,但是出现通讯失败,下位机接收不到上位机下发的指令;

原因:不详,同时打开同一个串口,可能其他程序会接收到下发的指令,导致你自己的程序接收不到消息;
解决方法:当运行程序的时候,需要先检查一下系统下是否有程序使用了同一个资源,如果是,先kill其他程序,再运行自己的程序获取系统资源;
linux下不知道是否可以以独占的方式获得资源,如果可以,当以独占方式打开已被其他程序使用的资源时,程序返回失败。待研究。

 

===========================================================

5. 问题:在Linux(本人在centos i686平台下运行正常,但在arm平台下运行出现以下问题)编译程序有时会遇到这种问题:

/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’
/usr/include/linux/types.h:13: error: previous declaration of ‘dev_t’ was here
/usr/include/sys/types.h:67: error: conflicting types for ‘gid_t’
...............................
原因:这貌似是一个Linux历史遗留问题。
解决方法:把所有#include <sys/xxx.h>都提到最前面,把#include <linux/xxx.h>的包含放在其后,就可以编译通过了,之所以出现面的问题是存在循环引用所致。

 

===========================================================

6. 问题:在window7下安装NFS服务器,将E:\vNFS\vdefault目录挂载到虚拟机下的centos 6 系统,出现"mount.nfs: access denied by server while mounting mount.nfs: access denied by server while mounting 192.168.241.1:/vdefault"的错误;

 原因:在虚拟机下挂载NFS目录,需要使用VMWare Network Adapter VMnet8的IP,在window7下cmd命令窗口,使用ipconfig查看到我的VMnet8的地址为192.168.36.1, 将挂载命令修改如下:

mount 192.168.36.1:/vdefault /mnt
挂载成功。

注意:(1)window7下的NFS服务器需要配置输出表文件,内容如下:

# exports example

E:\vNFS\vdefault -range -name:vdefault 192.168.36.128

其中192.168.36.128为虚拟机的ip地址,表示我们要将E:\vNFS\vdefault目录挂载到ip地址为192.168.36.128的系统上面,挂载的名字为vdefault。

(2)因为是需要虚拟机和本地通讯,所以mount的ip地址不可以为VMnet1地址,也不可以是无线网络的地址。


 

===========================================================

7. 问题:虚拟机挂载E:\vNFS\vdefault目录之后,window7下修改了NFS服务器输出表文件,在虚拟机重新进入mount时,出现:

bash: cd: /mnt: Stale NFS file handle

原因:当我们已mount 上的file or directory ,在server上突然被remove or unexport ,就会出现此讯息。

解决方法:umount目录之后重新挂载。

 

===========================================================

8. 问题

linux编译程序就出现这样的错误:

sms.cpp:1: stray '\357' in program
sms.cpp:1: stray '\273' in program
sms.cpp:1: stray '\277' in program

原因:出现此类错误的原因,(1)在编辑器中使用的utf-8的格式保存源代码中出现了中文的标点符号;

(2)\357\273\277是字节序标记,一般由某平台的文本编辑器自行加入文本开头。\357\273\277 就是 EF BB BF,这是 utf8格式文本文件的BOM头。

解决:查找中文字符,空格;或者,使用nodepad++新建一个文件,将原文件中的内容拷贝到新文本中(解决:utf8格式文本文件的BOM头); 

 


 

 

 

 

 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值