linux开发初识-csdn文章被攻击找回

来源:互联网 发布:淘宝定制小说人设图片 编辑:程序博客网 时间:2024/05/29 21:18

最近比较忙,前windows版本的平台新需求比较多,所以还没有多余的时间来完成windows向linux移植的工作,同时由于对linux的不熟悉,以及很多项目都没有使用夸平台库编码,这也增加了项目移植的难度,晚上加完班之余,自己又在努力的学习,只有不断提高自己在个方面的能力,再能走的更远,项目才能有所成就,希望见到这边文章的其他同事也同我一块努力,成就自己成就项目成就自己的梦想,梦想不是遥不可及的,如果你一直懈怠,你永远没有触碰它的机会!

     虽然作windows开发多年,但在linux面前,只能用“陌生”二字表达当前我对linux的认识,但是迫于项目紧急程度,不得不抽时间熟悉linux,由于windows开发多年,学习必经之路有:

(1) 在linux下如何找到对应的IDE开发环境,既方便好用又能调试;

(2) 如何编译生成可执行文件

(3) 如何生存动态库

(4) 如何生存静态库

(5) 可执行程序如何调用动态库和静态库

(6) 如何将项目依赖的组建全部打包安装到其他裸机上且能跑起来

    所有的这些在windows上已经游刃有余,当时在linux上,我就是一个无人问津的探路者,凭着windows下多年经验当然,作为服务器开发的linux,使用夸平台库是必然的也是必须的,我的目的不仅仅是跑起来,我需要的是同一份代码想在windows上跑就在windows跑,想在linux上跑就在linux跑,所以不论是文件系统、网络、IO、工具库、线程等等都一律使用boost库。


一、 关于系统环境的选择

     使用windows的时候,你会发现它有win95、win2000、win2003、win xp、win7、win8、win10以及个字版本的windows server,版本真的不少,但是都是微软一个人开发维护,而且这些版本都是不同时代的递进版本,linux版本也有很多,有ubuntu、fedoral、红旗、debian、redhat、centos等等,由于开源问题,这些版本并非一个公司在开发维护、各个公司的收费标准也不一样,每一个公司都维护一个型号,且型号也在升级,刚接触linux的过程中,我面临的第一个问题就是这么多个商家的这么多版本linux,我该如何选择对应的系统版本?经过多天的碰壁和了解到:

(1) 对于桌面开发程序,个人用户较为合适的有ubuntu、fedoral、debian,centos,但是个人感觉较好的是ubuntu和centos,其他两个版本很卡,unbuntu界面比centos绚,如果仅仅是用于娱乐,建议用ubuntu,开发建议使用centos,我本来想安装centos的,但是centos安装处处碰壁,最终使用u盘安装失败,最后被迫使用ubuntu来代替(这里说的centos就是redhat的免费版本,可以替代redhat,既具有unbuntu的友好桌面特性又是能作为redhat服务器替代品的高性能服务器特性)。企业用户最好的还是centos,因为它是redhat服务器的替代品!

(2) 对于服务器开发, 个人用户较为合适的就是centos,因为它免费! redhat具有开发维护周期长,长达10年的软件更新和系统更新维护,产品稳定,性能较高,所以企业作为服务器最佳的选择就是redhat, 但是问题就是它是收费的,不然,适用版本yum是无法安装更新系统或软件的,所以作为redhat的免费替代品centos诞生了。。

     其实,这里我说的所有系统在安装的过程中处处碰壁,所以我都安装过,本以为最合适的centos能够满足我的需求,但是在安装真实环境过程中才发现centos7安装包有问题,虚拟机可以使用,但是真实安装时老是错处(桌面版本,服务器版本没有问题),所以最终选择放弃,使用ubuntu替代桌面开发版本。



二、 关于开发环境的选择

       首先,作业一个windows下开发的老C++程序员,已经习惯了vs带来的方便,所有的操作都是图形化,根据之前同事学习linux经验,他们从windows移植到linux过程中,都是在windows下使用vs进行编码的,具体的就是将linux下的系统头文件夹拷贝到windows下,使用vs工具的便利性进行编码,然后通过虚拟机到linux下编译,最后形成一个可执行程序;

这里的好处就是不改变IDE的使用,利用原来vs开发经验去编写linux程序,上手快,且利用windows的图形界面,编码效率快,但问题是无法编译立即解决编译错误问题,当问题累计越多的时候估计谁都无法解决一些莫名的错误;所以使用vs也不是一个很好的办法;

      除了vs之外,一个夸平台的IDE就是Eclipse了,之前接触过Eclipse中C++开发插件CDT,可能是版本较旧问题对其印象不是很好,但是使用最新的CDT之后才发现Eclipse的强大功能才发挥的淋漓尽致,因为干过2年javaweb,已经对Eclipse和Myclipse非常熟悉了,既然有了CDT插件,在利用Eclipse的强大功能,不论对于编码速度、开发效率以及调试效率都是一个不可多得的工具,并且在编码的同时及时编译解决问题,所以最终选择了Eclipse;


三、 关于开发实践

      遇到的问题永远不是最后的问题,后面等着的问题还多着呢!  遇到的第一个大问题就是可执行文件调用动态库,编译都没有问题,运行的时候一直报找不到so动态库文件?我明明是将so文件放置到调用工程的可执行文件同一目录下,且so 搜索路径也同时被设置了,可惜就是找不到,这个和windows差异较大,在windows下运行文件如果缺少首先会在exe目录查找、找不到再去环境变量里找,再找不到就去system32中去查找,如果以上三种情况找不到才报错! 在linux在,首先将so放置在可执行程序同一目录,其他设置环境变量(ld.so.conf): /etc/ld.so.conf   

include /etc/ld.so.conf.d/*.conf
/home/lixiang/workspace/SimpleMath/Debug
然后sodu  ldconfig 使得变量重新有效,这里我后面添加的路径 “/home/lixiang/workspace/SimpleMath/Debug"就是我的so动态库所在路径,此时运行动态库即可运行,这里说明的是,与windows不同,在linux下即使可执行程序和依赖组建在同一目录下面,我们用Eclipse开发C/C++程序时,一般都需要使用动态库,而Linux一般通过缺省路径查找动态库或设置LD_LIBRARY, 与windows不同,即使将动态与可执行文件放在同一个目录都不会查找得到,为了开发的便利,一般在编译时指定查找路径,等部署时再根据实际需要修改。

GCC 加参数:-Wl,-rpath, (路径) 即可设置查找路径。

在Eclipse C/C++中的设置方法为:右键项目->C/C++ Buid->Settings->Tool Settings->GCC C++ Linker->Miscellaneous->加入 -Wl,-rpath (路径)



0 0
原创粉丝点击