ARM-linux(fedora)随笔.doc_第1页
ARM-linux(fedora)随笔.doc_第2页
ARM-linux(fedora)随笔.doc_第3页
ARM-linux(fedora)随笔.doc_第4页
ARM-linux(fedora)随笔.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LD_LIBRARY_PATH环境变量的设置文章分类:操作系统 在linux下的编程,毫无疑问的迟早都要用到LD_LIBRARY_PATH这个环境变量,不过这个环境变量是基于shell的,也就是说只有在当前设置了的shell里才会有作用,因此每次打开新的shell运行程序不停地设置LD_LIBRARY_PATH,是一件非常麻烦的事情,所以我们就会想有不有什么一劳永逸地方法,使得设置之后就不用再去设置了?答案是肯定的,即在/目录下打开.bash_profile文件,设置环境变量如下:Java代码 1. LD_LIBRARY_PATH=dir:$LD_LIBRARY_PATH 2. exportLD_LIBRARY_PATHLD_LIBRARY_PATH=dir:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH那么以后打开新的shell执行程序是,再也不用每次打开shell就设置LD_LIBRARY_PATH环境变量了。附:linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf 或者 使用-R选项)今天下午尝试使用libosip2,安装比较简单,按照自带的help文档里面的操作进行即可。$mkdir linux-build$cd linux-build$./libosip2-2.2.0/configure$make (最后2步要在管理员权限下执行)# make install完成之后,会在/usr/local/lib路径下生成一些lioosipXXX.so的文件,在/usr/local/include下生成关于 osip的头文件。为了测试安装是否正确,在eclipse下建了个测试项目,写了很简单的代码:然后查到可能是因为共享库设置的问题:下面的几段是转载的,看了之后明白linux怎么找到共享库的=Linux 运行的时候,是如何管理共享库(*.so)的?在 Linux 下面,共享库的寻找和加载是由 /lib/ld.so 实现的。 ld.so 在标准路经(/lib, /usr/lib) 中寻找应用程序用到的共享库。但是,如果需要用到的共享库在非标准路经,ld.so 怎么找到它呢?目前,Linux 通用的做法是将非标准路经加入 /etc/ld.so.conf,然后运行 ldconfig 生成 /etc/ld.so.cache。 ld.so 加载共享库的时候,会从 ld.so.cache 查找。传统上,Linux 的先辈 Unix 还有一个环境变量:LD_LIBRARY_PATH 来处理非标准路经的共享库。ld.so 加载共享库的时候,也会查找这个变量所设置的路经。LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./libexport LD_LIBRARY_PATH但是,有不少声音主张要避免使用 LD_LIBRARY_PATH 变量,尤其是作为全局变量。这些声音是:* LD_LIBRARY_PATH is not the answer - /articles/linkers.badldlibrary.html* Why LD_LIBRARY_PATH is bad - /UnixResource_dir/_/ldpath.html* LD_LIBRARY_PATH - just say no - /rie/date/20040710解决这一问题的另一方法是在编译的时候通过 -R 选项指定 run-time path。1. 往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library 会找不到2. 想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到。比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在/usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存过后ldconfig一下,新的 library才能在程序运行时被找到。3. 如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时候使用。4. ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。5. 总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。LD_LIBRARY_PATH 这个环境变量是大家最为熟悉的,它告诉loader:在哪些目录中可以找到共享库。可以设置多个搜索目录,这些目录之间用冒号分隔开。在linux下,还提供了另外一种方式来完成同样的功能,你可以把这些目录加到/etc/ld.so.conf中,然后调用ldconfig。当然,这是系统范围内全局有效的,而环境变量只对当前shell有效。按照惯例,除非你用上述方式指明,loader是不会在当前目录下去找共享库的,正如shell不会在当前目前找可执行文件一样。=在shell下尝试设置LD_LIBRARY_PATH,以下面这种形式设置,老是报错bash: LD_LIBRARY_PATH: command not found,LD_LIBRARY_PATH=/usr/local/libLD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/usr/local/lib可能是因为系统之前没有设置过LD_LIBRARY_PATH,于是改成这样:export LD_LIBRARY_PATH=/usr/local/lib然后用 echo $LD_LIBRARY_PATH检查一下是否真的设置成功,发现可以。接着在该shell下运行eclipse生成的可执行文件,没有错误。另外,如果不想每次新启一个shell都设置LD_LIBRARY_PATH,可以编辑/.bash_profile文件:$ vi /.bash_profile添加:LD_LIBRARY_PATH=/usr/local/libexport LD_LIBRARY_PATH这两行,完成之后.bash_profile如下所示:# .bash_profile# Get the aliases and functionsif -f /.bashrc ; then . /.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/binLD_LIBRARY_PATH=/usr/local/libexport PATHexport LD_LIBRARY_PATH然后运行$ source /.bash_profile 就行了。但是这种方法只能用在shell下,想在eclipse里面运行,还是不行:尝试了eclipse项目properties里面的各种设置都不起作用。用“eclipse LD_LIBRARY_PATH”作为关键字(可见关键字多么重要)才搜到这么篇文章 eclipse+cdt+gcc编译选项控制 /zsffei/blog/item/7b17c043ceb51e1772f05de1.html才知道应该在eclipse的项目属性-C/C+ Build-Settings-Tool settings-GCC C+ Linker-Miscellaneous的Other options (-Xlinker option)添加 -R/usr/local/lib运行,一切正常,折腾了一下午,太感动了。转载自:/logs/50437681.html linux cd命令参数及用法详解-linux切换目录命令范例 : 跳到 /usr/bin/ : cd /usr/bin跳到自己的 home directory : cd 跳到目前目录的上上两层 : cd ./. cd - 返回进入当前目录前所在目录为了确定你所在的目录,你可以键入pwd,按回车键,你将看到你所在的当前目录名称。Fedora13 中 NFS的配置 收藏 有个仁兄的NFS配置文章写的不错,就直接拿过来了,但是在Fedora13和14版本中,有些东西已经不再适用,因此做了些修改。文章目录:一、开启NFS服务二、设置NFS服务器转网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。 NFS 是嵌入式Linux 开发的一个重要的组成部分,本部分内容将详细说明如何配置嵌入式Linux 的NFS 开发环境。嵌入式Linux 的NFS 开发环境的实现包括两个方面:一是Linux 服务器端的NFS 服务器支持;二是嵌入式目标系统的NFS 客户端的支持。因此,NFS 开发环境的建立需要配置linux 服务器端和嵌入式目标系统端。一、Linux 服务器端NFS 服务器的配置 对于初学者,最好安装DVD版本的Fedora,选择安装软件开发版本,这样可以避免缺少开发中的许多库。以root 身份登陆Linux 服务器,打开里的NFS,开始准备配置共享目录配置好时如下图这里的主机号为虚拟机的IP号码段,启动NFS服务# /etc/rc.d/init.d/nfs start用户也可以重新启动Linux 服务器,自动启动NFS 服务。在NFS 服务器启动后,还需要检查Linux 服务器的防火墙等设置(一般需要关闭防火墙服务以及360,瑞星等杀毒软件),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux 服务器iptables,ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 文件。我们首先在Linux 服务器上进行NFS 服务器的回环测试,验证共享目录是否能够被访问。在Linux 服务器上运行如下命令:二、嵌入式目标系统NFS 客户端的配置 首先保证,XP系统的IP,虚拟机系统的IP,ARM板的IP要在同一网段。具体做法:第一步:PC机中打开“网上邻居”,把的IP改为PC机本地IP同一网段。第二步:在PC机中运行CMD,输入“ipconfig”得到第三步:到虚拟机中用ifconfig指令查看bcast、mask 是否和主机保持一致。不一致时要改成一致很明显网关和子网掩码与PC机的不同需要修改修改指令:ifconfig eth0 9ifconfig eth0 broadcast 55ifconfig eth0 netmask 改好后再用ifconfig指令查看,如下第四步 同样的到超级终端里也要修改IP 网关等指令如下:ifconfig eth0 99ifconfig eth0 broadcast 55ifconfig eth0 netmask 改好后,用指令ifconfig查看,输出结果为:这样就保证了,XP系统IP,虚拟机IP以及ARM板IP都在同一个网段了。接下来,就是测试网络通不通了,即PING 网络第一个是主机与虚拟机ping通了,其实很简单,只需选择桥接方式(Bridge)即可。 第二个就是主机与开发板ping通了。实在不行了,终于拿寝室的路由器做实验了,将路由器引出的两条网线一条接主机,一条接开发板,各种网线,电源线的纠结后,终于将主机与开发板ping通了,但是主机和虚拟机又ping不通了,这里我一直有个想法:主机ping通开发板,主机ping通虚拟机,虚拟机就会ping通开发板,可能由于多种原因没能成功,但我想这个办法理论上应该可以,也许今后学习中有机会再尝试一下吧。 第三个,也就是重头戏了,虚拟机终于ping通开发板了,哇咔咔!真的非常高兴。闲话少说,赶紧进入正题。首先在 菜单“虚拟机”下的“设置”改成如下所示- 然后到菜单“编辑”选择“编辑虚拟网络”改成如下所示选择你自己的网卡,这就是我一直困扰的问题,当你开发板ping主机或虚拟机时,感觉设置都没问题,就是哪里断了,其实就在这里需要指定你的网卡,才能是网络接通。完成保存。另外防火墙之类的都关了吧(像360安全卫士,杀毒软件都有防火墙,索性都关了),如果防火墙和IP没有设置好就好出错mount: RPC: Unable to receive; errno = No route to host这个时候ping一下,你就会惊奇的发现,ping通了。虚拟机ping通了ARM板:如下图ARM板Ping虚拟机的结果如下:在Ping通时,如果你开启瑞星保护,马上就会接收不到数据,所以在Ping之前要关掉瑞星保护的PING通了,就可以进行NFS挂载了,在超级终端里输入: 我们可以从超级终端中看到我们的虚拟机目录UP-CUP6410下的东西了接下来,要显示hello world,进入ARM之门。Windows IP Configuration你是要打开局域网的网页还是外网的网页?如果是局域网网页的话,配置一下你的网卡信息,使你主机的IP和局域网IP在同一个网段,或者能够连接到局域网的其他网段。临时配置IP方法:ifconfig eth0 68 netmask #eth0为网卡代号永久配置IP方法:vim /etc/sysconfig/network-scripts/ifcfg-eth0把IPADDR的值改成你想设置的主机IP地址,其他的基本不用改变。如果要打开外网网页的话,你需要一个公网的IP,或者局域网有DHCP服务器为你提供公网IP地址。vim /etc/sysconfig/network-scripts/ifcfg-eth0把IPADDR和NETMASK字段注释掉,修改BOOTPROTO=dhcp。修改完配置文件后,重启网络服务。service network restart我的ARM开发板ping 不通虚拟机和主机,但是主机和虚拟机之间可以互相ping通,为什么?可能是你的防火墙打开的原因,我曾经遇到过,你把防火墙关掉(包括xp自带的和你自己装的都要关掉)。 另外的一种原因就是你的开发板的ip协议时不完整的,不能ping到主机,不过这个不影响你的实际工作,只要主机能ping同arm板,就是可以用网线直接通信的,烧程序什么的都没问题的。NFS挂载失败问题:NFS mount failed, reason given by server: Permission . 需要将上的/usr/local/sgs/deploy挂载到的/opt/ant/146上,本来是件很简单的事情,可是却怎么也挂不上去,一直提示 reason given by server: Permission denied,看的messge日志,提示验证成功。1、重启nfs不行2、重启portmap也不行3、换一台客户端,还是同样的错误。4、最后发现host问题查看ARM板的hostname,# hostname显示为TM-0166在虚拟机里 # vi /etc/sysconfig/network把HOSTNAME=localhost改为HOSTNAME=TM-0166重启问题马上得到解决。mount: 7:/yyf failed, reason given by server: Permission denied如何解挂当你挂载了一个文件以后,想换挂另一个文件,这时你要先执行umount(解挂),然后再接着挂载。Usage: umount flags FILESYSTEM|DIRECTORYUnmount file systemsOptions: -a Unmount all file systems -r Try to remount devices as read-only if mount is busy -l Lazy umount (detach filesystem) -f Force umount (i.e., unreachable NFS server) -d Free loop device if it has been usedrootUP_6410 yaffs# umount -f /mnt/nfs解挂具体实例注意:要上目录回到/mnt下,再执行umount f /mnt/nfs,而不能在/mnt 的子目录nfs下解除/mnt/nfs ,具体实例如下:一个长期困扰我的问题如下图所示:解决方法:在终端中输入:vi /.bashrc,进入之后,把代码修改为如下图:第二次修订做域名反解我原来的/etc/exportfs是这样的:rootha1 nfs# cat /etc/exports/nfs/mp3/mp3files 192.168.1.*(rw,async)一直都用的好好的,其它的机器通过内网来mount这台上面的数据。所以我想应该是我做了什么造成的,因为之前我看到/var/log/messagesmountd3082: Fake hostname rs0.xxxxxxcom for 9 - forward lookup doesnt exist以为nfs警告说我没有做域名反解,所以我就在我的域名服务器做把9做了一下反解。并增加了这个域名到9。做完之后就没有再出现上面的错误了,但是上面说的出现不能mount的情况。在网上查了一些资料,有人说把/etc/exports换成域名试试,所以我就改成了:rootha1 nfs# cat /etc/exports/nfs/mp3/mp3files *.(rw,async)再mount,发现正常,没有问题了。后来又查了一些相关资料,才知道:nfs server接到客户端的mount时,会先客户的IP做反解成域名,用域名(注意是用域名而不是)去和/etc/exports做比较,如果匹配不成功会失败。而我做了域名反解后,并没有更新/etc/exports内的为域名。所以匹配不到对应的域名,自然就出现mount: 72:/nfs/mp3/mp3files failed, reason given by server: Permission denIEd的错误了。之前用没有问题是因为在域名不能反解的时候还是用去匹配的。如果要永久修改RedHat的hostname,就修改/etc/sysconfig/network文件,将里面的HOSTNAME这一行修改成HOSTNAME=NEWNAME,其中NEWNAME就是你要设置的hostname.hostname与/etc/hosts的关系很过人一提到更改hostname就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts.其实不是的.hosts文件的作用相当如DNS,提供IP地址到hostname的对应.早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机.不过随着互联网的发展,这就远远不够了.于是就出现了分布式的DNS系统.由DNS服务器来提供类似的IP地址到域名的对应.具体可以man hosts.Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录./etc/hosts文件通常里面包含这一条记录 localhost.localdomain localhosthosts文件格式是一行一条记录,分别是IP地址 hostname aliases,三者用空白字符分隔,aliases可选. 除錯參考 當/etc/exports設定的權限,不符合clIEnt端的來源時,則會出現錯誤訊息如下mount: hostname:/dir failed, reason given by server: Permission denIEd然而必須注意的是,若在nfs server的/etc/hosts內有設定IP與hostname的對照則nfs會先把來源IP轉換成hostname,再與/etc/exports內的設定作對照若此時/etc/exports的設定使用IP而非hostname,則會產生無法匹配的情況因此而出現,雖然來源IP在/etc/exports已正確設定,卻仍然發生Permission denIEd的怪異現象解決方案是在/etc/exports內採用hostname,避免使用IP 到localhost这一条建议不要修改,很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行.修改hostname后,如果想要在本机上用newhostname来访问,就在/etc/hosts文件里添加一条newhostname的记录.比如我的eth0的IP是1,我将hosts文件修改如下:#hostname # cat /etc/hosts localhost.localdomain localhost1 blog这样,我就可以通过blog或者来访问本机.从上面这些来看,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来访问自己的时候才会用到/etc/hosts文件.两者没有必然的联系.RHEL还有个问题.我开始在测试的时候,只修改/etc/hosts,里面添加 1 blog,而/etc/sysconfig/network维持原状,也就是里面的HOSTNAME=localhost.localdomain.我重启系统后居然发现hostname给修改成了.这样看的话,倒真觉得/etc/hosts是hostname的配置文件.后来终于在/etc/rc.d/rc.sysinit这个启动脚本里发现了问题的所在.rc.sysinit文件里一开始就设置了hostnameif -f /etc/sysconfig/network ; then. /etc/sysconfig/networkfiif -z $HOSTNAME -o $HOSTNAME = (none) ; thenHOSTNAME=localhostfi确实使用了/etc/sysconfig/network里的hostname值.不过后面还有一段关于设置hostname的ipaddr=if $HOSTNAME = localhost -o $HOSTNAME = localhost.localdomain ; thenipaddr=$(ip addr show to 0/0 scope global | awk /:space:inet/ print gensub(/.*,g,$2) )if -n $ipaddr ; theneval $(ipcalc -h $ipaddr 2/dev/null)hostname $HOSTNAMEfifi脚本判断hostname是否为localhost或者localhost.localdomain,如果是的话,将会使用接口IP地址对应的 hostname来重新设置系统的hostname.问题就出在这里,我的/etc/sysconfig/network默认的hostname是 localhost.localdomain,eth0的IP是1,而/etc/hosts里有1的记录.于是就用1这条记录来替换了hostname. 在Fedora下成功将Vim打造成适用于C/C+的IDE 经过一番努力和折腾,终于实现了基于Vim的C+集成开发环境,哈哈。目前已完成的功能有:语法高亮,自动补全(包括局部变量补全,关键字补全,单词补全和库函数补全),项目管理,变量和函数定义跳转,.CPP文件和.H文件快速切换,集成编译和改错,集成SVN版本控制,集成文件浏览器等等。除了调试外,已经具备IDE的基本功能了。我没有集成gdb的调试功能是因为有更好的GUI调试工具-Insight。具体实现步骤,我就不说了,网上一堆手把手叫你打造VIM的IDE的文章。我这里贴一下我的配置文件和插件列表。如果你嫌按照网上的教程配置很麻烦的话,不妨下载我打包的自己的配置压缩包,覆盖到你的fedora个人目录下,应该就可以用了。打包下载:我的Vim配置压缩包 (2.6日23点更新)里面包括vimrc文件和.VIM目录下的文件,包括doc和plugin。注意:我没有提供ctags,这个必须安装哦,请到/下载最新版的。我映射了专用于C+ TAGS生成的快捷键Ctrl+F12,另外我添加了自己的tags路径,注意按需修改。另外还需要修改的部分可能是path的路径。vimrc里面都有注释,应该不难看明白。插件列表:a.vim 用于快速切换.CPP已经相应.H文件。acp.vim 用于局部变量完成,不仅如此,这个会记住文件中所有已经输入过的单词和句子,不过和系统中文输入会有些冲突,不过用了后面提到的vimim插件后,就不存在这个问题了。bufexplorer.vim 浏览打开的buffer。echofunc.vim 显示函数原型,当你在函数名后面敲入(时就会像VS那样在窗口底部显示函数原型。omnicppcomplete 用于补充默认的omni自动完成功能。添加对C+的支持。其他语言的也有相应的补充插件。matrix.vim 用于显示黑客帝国里面的字母屏幕,挺好玩的,哈哈project.vim 项目管理,组织管理项目以及里面的文件。taglist.vim tag管理,可以用于跳转函数和变量定义vcscommmand.vim 用于集成版本控制,需要安装相应的版本控制软件,支持cvs,svn等vimim.vim vim中的输入法,支持五笔,拼音还有搜狗云输入,这个很强大。vim中可以不用系统的输入法了。我的压缩包里面已经包含了拼音和笔画输入的字库。需要五笔的自己去下吧。使用Ctrl+调出输入法。winfileexplorer.vim 文件浏览器,在vim中浏览系统里面的文件winmanager.vim 窗口管理器,用于管理文件浏览器,缓冲区浏览器和taglist的浏览器窗口,我映射了新的打开快捷方式为 wm(普通模式下)另外附上截图:del.icio.us: C+, Linux, Vim终端Fedora vim配置文件编辑 = 作者: mydear()发表于: 2010.10.22 07:33分类: 一般分类 出处: /post/28567/507373- Fedora vim是常用系统,于是我学习研究了Fedora vim,在这里对大家详细介绍下Fedora vim系统应用,希望对大家有用。本文对Fedora vim的设置仅仅针对UBUNTU与Fedora系统,其他LINUX版本我没有实验过,敬请读者谅解!谢谢在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为Fedora vim在Fedora vim的配置文件存放在/etc目录中,配置文件名为Fedora vim在终端 输入以下命令来编辑vimrc配置文件:sudo vim /etc/vim/vimrc或者 sudo gedit /etc/vim/vimrcYYF我的修改用:vi /etc/vimrc1、显示行号在文件末端添加一新行,输入 set nu2、语法高亮在文件中找到 syntax on 这一行,去掉前面的双引号,双引号是注释的意思3、自动缩进在文件末尾添加一行,输入 set autoindent在添加一行,输入 set cindent其中 autoindent 是自动缩进; cindent是特别针对 C语言语法自动缩进注意:如果设置好以上设置后,Fedora vim没有作出相应的动作,那么请你把你的Fedora vim升级到最新版,一般只要在终端输入以下命令即可:sudo apt-get install vim祝大家使用Fedora vim愉快!Makefile文件的笔记CC = arm-linux-gccEXEC = helloyyfOBJS = helloyyf.oCFLAGS +=LDFLAGS += -staticall: $(EXEC)$(EXEC) : $(OBJS)$(CC) $(LDFLAGS) -o $ $(OBJS) /规则所在的行必须以tab键开头,$表示当前目标的名字clean:-rm -f $(EXEC) *.elf *.gdb *.o/删除命令rm前的“-” 的含义是让make忽略rm命令的执行结果,这意味着,即使由于目标文件不存在而导致rm命令返回错误,命令make clean也会成功。在Makefile文件中增加一个clean选项来删除不需要的目标文件,增加一个install选项来将编译成功的应用程序安装到另一个目录下。例:myapp: main.o 2.o 3.omain.o: main.c a.h2.o: 2.c a.h b.h3.o: 3.c b.h c.h它表示目标myapp依赖于main.o 2.o和3.o;而main.o依赖于main.c和a.h等等。在gedit下要打开一个.c文件时出现这个情况: 解决方法是:在右边的下拉选择“添加删除编码方式”,在左边选择:“中欧什么编码的,你试一下就是了”,然后点击重试就可以了。struct sockaddr unsigned short sa_family; /* address family, AF_xxx */char sa_data14; /* 14 bytes of protocol address */;sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET。sa_data是14字节协议地址。此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构sockaddr_in(在netinet/in.h中定义):struct sockaddr_in short int sin_family; /* Address family */unsigned short int sin_port; /* Port number */struct in_addr sin_addr; /* Internet address */unsigned char sin_zero8; /* Same size as struct sockaddr */;struct in_addr unsigned long s_addr;typedef struct in_addr union struct unsigned char s_b1, s_b2, s_b3, s_b4; S_un_b; struct unsigned short s_w1, s_w2; S_un_w; unsigned long S_addr; S_un; IN_ADDR;sin_family指代协议族,在socket编程中只能是AF_INETsin_port存储端口号(使用网络字节顺序)sin_addr存储IP地址,使用in_addr这个数据结构sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。s_addr按照网络字节顺序存储IP地址sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向sockadd的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息,在最后用进行类型转换就可以了bzero(char*)&mysock,sizeof(mysock);/初始化mysock结构体名mysock.sa_family=AF_INET;mysock.sin_addr.s_addr=inet_addr();等到要做转换的时候用:(struct sockaddr*)mysock添加点关于sockaddr_un结构体的介绍:sockaddr_unUnix socket address record.按照指导书P113页配置QT-x11环境时:把这三个文件夹都拷贝到如下目录并解压然后我双击了这里面的build4arm.sh这样我就可以按照指导书113页上的第二步走了的指导书上P135,使用 ./build.sh 命令出错时解决方法:是autoconf,automake,libtools安装的问题。重新安装然后再编译tslib就好了。不知道为什么!操作到P137,执行./bin/ts_calibrate 时出现而来下面的错误现象:解决方法:加入环境变量export QTDIR=$PWDexport LD_LIBRARY_PATH=$PWD/libexport TSLIB_TSDEVICE=/dev/event1export TSLIB_PLUGINDIR=$PWD/lib/tsexport TSLIB_CONSOLEDEVICE=noneexport TSLIB_CONFFILE=$PWD/etc/ts.confexport POINTERCAL_FILE=$PWD/etc/ts-calib.confexport QWS_MOUSE_PROTO=tslib:/dev/event1 export QWS_MOUSE_PROTO=tslib:/dev/event0export TSLIB_CALIBFILE=$PWD/etc/ts-calib.confexport QT_QWS_FONTDIR=$PWD/lib/fontsexport LANG=zh_CN解决方法Makefile混和的隐含和普通规则错误的解决 工作环境: fedora14目标平台:s3c6410开发包内核源码目录:/home/linux-2.6.24-5801开发包内核版本:2.6.24交叉编译工具:gcc-3.4.1用gcc-3.4.6交叉编译3210内核,执行make命令,会提示* 混和的隐含和普通规则。 停止。的错误。这是由于f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论