===========================================================
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头);