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环境中找到)
起初分析以为是找不到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环境中找到)
相关文章推荐
- CGYWIN 编译的可执行程序在WINDOWS平台中运行时,解决system函数不能使用的问题
- 解决acadia交叉编译后程序不能运行的问题。
- vs2012编译的程序不能在XP和2003下执行问题的解决方法
- 解决WIN7-64,VS2008编译的MFC程序在WIN7-32/XP上不能运行的问题
- vs2013编译的程序不能在XP和2003下执行问题的解决
- gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行
- 错误1083:配置成在该可执行程序中运行的这个服务不能执行该服务 【解决】
- qt creater环境下编译出来的程序在其他环境上不能运行问题
- [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)
- 如何在windows中使用cmd命令去编译,运行C++程序
- windows命令行下随时随地调用csc编译器的方法(解决dos下编译.net程序找不到CSC的问题)
- 运行VS可执行文件 360提示有菠萝影音插件想要捆绑 导致程序无法正常编译和运行解决办法
- Windows下编译OpenSSL库(解决调用"ms\do_nasm或ms\do_*" 不是内部命令,也不是可运行的程序或批处理文件)
- VS2010 编译的Direct3D程序不能运行解决方法
- 解决小米手机不能运行Android Studio程序的问题
- 解决VS2005编译的MFC在没有安装VS2005的机器上不能运行的问题
- 以不同用户身份运行程序,/savecred只需要输入一次密码(GetTokenByName取得EXPLORER.EXE的令牌,然后调用CreateProcessAsUser,而且使用LoadUserProfile解决另存文件的问题)good
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序
- Windows 2008 r2任务计划程序执行批处理失败问题解决方法
- Windows 下使用 GNUstep 编译并运行 Objective-C 程序