您的位置:首页 > 其它

CGYWIN 编译的可执行程序在WINDOWS平台中运行时,解决system函数不能使用的问题

2013-03-01 15:51 891 查看
原来在linux平台运行的一段代码,移植后将编译出来的EXE拷贝到与cgywin无关的目录中的xp平台运行,基本功能包括进程间通信、数据管理、日志管理、其它进程管理等。经测试验证,大部分功能都能正常工作,只是在使用system函数加载其它进程时,函数总是执行失败,错误提示为:找不到指定的目录或者文件。

起初分析以为是找不到system将要加载的可执行文件,所以将进程所在的目录加入到XP的path环境中,测试结果还是报相同的错误。在google上找了一圈,说需要将cgywin所在的bin目录也要加入到path环境中,加入之后发现还是不行。

反复折腾了一上午,最后无奈之下只得去看system的源代码,发现system源代码中是用过绝对路径/bin/sh调用sh的,顿时醒悟错误提示中找不到的应该是/bin目录。system在linux平台运行时,可以理解,因为linux平台有/bin目录,但是现在是在windows平台中运行的,不理解cygwin是如何进行转换的,还是根本就不支持system.

在代码中使用getcwd函数读取了当前进程的工作目录,惊讶的发现居然不是该进程在XP环境中的目录,而是"/test",test是可执行文件A所在的目录,顿时领悟,在test目录中新建了一个bin文件,然后将进程A,A需要通过system函数加载的进程B,以及cygwin的bin目录中的sh,全部拷贝到该bin中(这里还需要将sh运行的dll拷贝进来),在此测试运行问题解决,A可以通过system函数加载B进程

 

总结:使用cgywin工具移植linux的代码编译出来的可执行文件如果需要脱离cgywin所在环境,单独运行在XP环境下,需要将程序中使用到的其它原本属于linux的命令,一起拷贝到可执行文件所在的发布包中(需要的命令移植DLL,都可以在cgywin环境中找到)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐