记一次把Windows程序移植到Linux的过程
2016-06-24 16:35
309 查看
场景复现
今天下午,客户反映我们系统的API在Linux下使用时有点问题。发布主管,想在本地做个测试,但是目前现有的Demo程序只有windows版本的,所以找到负责API的我,把该Demo程序从Windows移植到Linux。问题及解决方案
问题1:
windows下的vsnprintf_s在Linux下该替换为什么呢?解决方法:
Linux下可以采用vsnprintf函数来对vsnprintf_s进行替换。注意点:
vsnprintf与vsnprintf_s的参数对应基本相同,只不过需要给出所要写入的buffer的大小。具体请参见vsnprintf和vsnprintf_s的函数定义。
问题2:
windows下的Sleep函数在Linux下替换为什么?解决方法:
Linux下对应的睡眠函数为sleep和usleep,不同点在于,sleep函数对应的睡眠时间参数是以秒为单位的,usleep函数对应的睡眠时间参数是以微秒为单位的。而windows下的Sleep函数的参数是以毫秒为单位的。问题3:
编译时遇到如图所示问题:解决方案:
本次编译出现上面问题的原因是所用的Linux操作系统是64位的,而所链接的动态库所支持的是32位操作系统,进而把动态库替换为64位的即可解决问题。问题4:
编译链接得到可执行文件之后,执行可执行文件出现如图所示错误提示:解决方法:
由问题描述可知,找不到动态库文件,但是动态库明明是存在的,不然编译时是怎么用的?所以可以推测出,引发该问题的原因是,执行时,找不到该动态库,由此想到了LD_LIBRARY_PATH环境变量,Linux在执行可执行程序时,会从该环境变量获取查找动态链接库的目录,进而从相应目录中查找链接相应的动态链接库,所以查看下该环境变量
一看,果然没有我们的动态库所在的目录,果断添加之:
可以看到已经将我们的动态链接库所在目录添加到了LD_LIBRARY_PATH环境变量中,搞定!程序开始执行!!
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍