vc 写得程序只能在Windows上运行? 可以跨平台吗? vc 写得程序只能在Windows上运行? 可以跨平台吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VC有编译选项上有选择目标机器的,如CE系统.. 你想移植到哪个平台?Linux? 不是说 用 wxWidgets 可以跨平台吗? wxWidgets----------------听说过 vc是一个C/C++编译器,这个编译器只能产生在windows平台下运行的代码,不能跨平台。 如果用 python开发 wxPython 程序, 可以使用 BOA IDE(BOA就是用WxPython编写的) 如果用 python开发 QT 程序,应该是用啥IDE呢??疑惑 wxWidgets 可以用VC编译器产生windows下运行的代码,wxWidgets也可以用gcc编译器产生在linux下运行的代码。但是vc只支持windows,当然因为它是微软的产品。 只要是支持python都IDE都可以啊,比如eclipse这个跟IDE无关,跟库有关。 Python 开发时安装了 wxpython,是不是就不需要在单独安装 wxWidgets了?Python 开发时安装了 PyQt,是不是就不需要在单独安装 qt sdk 了? Python 开发时安装了 wxpython,是不是就不需要在单独安装 wxWidgets了?是的,不需要安装。Python 开发时安装了 PyQt,是不是就不需要在单独安装 qt sdk 了?不清楚,没用过PyQt。 我只是用C++标准类库,并且用wxWidgets做界面,应该可以跨平台吗? 那怎么办呢? 在Linux运行得用GCC在编译一下??这叫一次编码 到处编译? 可以肯定的讲,VC写的可以跨平台,前提是在源码级的,具体做法如下:1)程序内核尽量是设备无关的;2)建立设备相关层:不同的平台如Linux、uCOS或eCOS、Windows都只需要修改这里就可以了;其中包含了FrameBuffer处理、多任务的消息机制、内存管理、文件管理、定时器等;设备相关层在不同平台下使用的接口是一致的;针对Windows系统,详细解释如下:1)所有显示只使用FrameBuffer,在Windows使用CreateDIBSection可以很容易实现,其他的显示系统都很容易“模拟”FrameBuffer;2)尽量使用标准的函数库,malloc可以在Linux和Windows下编译通过;(GCC或VC++)我之前是在芯片公司做IP算法的,核心算法可能会同时被要求在多个系统下运行,但多数我喜欢使用Windows,因为调试比较方便;早先写了一个Flash播放器,其源码可以同时在Windows+GDI、uCOS+FrameBuffer及使用MicroWindows+eCOS、DirectFB+Linux下编译;当时作得比较过分,连内存管理都自己重新写了,实际核心程序基本上可以说是纯C++的程序了; Qt,wxWidgets本身就是c/c++跨平台的典范了啊,其它的比如 VTK,OGRE,libpcap 都是跨平台的,楼主可以阅读它们的文档了解它们如何跨平台的。 照这么说,Qt,wxWidgets 也只是源码级跨平台 从来就只有源码级跨平台,用虚拟机的就算了,比如JAVA,顶多算个中间代码跨平台 VC 主要是针对于Windows的,如果不涉及的界面,用VC 进行代码编辑,然后在到其他平台编译和调试。VC的编译结果只能在VC下运行 界面部分可以通过设备相关层隔离开(如FrameBuffer,我的程序基本上就是这样处理的),其他部分如果只涉及标准C++语法,通过适当的编译开关,基本上可以做到在平滑移植(如GCC下直接编译)只是这种状况下比较难处理的是声音(显示比较好办),通常情况下会使用一个具有统一接口的StreamSound(Linux、Windows等平台都支持StreamSound),然后自己建立一个纯软件的SoundMix解决多Channel协调的问题;所以多数情况下,即使是嵌入平台,我一定是先用VC++,毕竟调试很方便;然后通过很薄的设备相关层完成跨平台的移植工作;事实上glut就是使用这样的思路 ----- 与具体窗口无关;只是glut不够轻量,所以,一般我是自己建设备相关层; 发一个简单示例(我自己程序的一个片段,这个程序源码不需要改动可以直接在eCOS + MicroWindows和Windows + GDI的环境下运行extern "C" {unsigned int SI_GetTime(void){#ifdef __SPMP8000 return cyg_current_time() * 10;#else return GetTickCount();#endif}// 启动定时器// 入口参数:// playTimerInterval FlashPlayer的主定时器,毫秒值// cursorTimerInterval 光标闪烁定时器,毫秒值bool SI_StartupTimer( int playTimerInterval, int cursorTimerInterval ){ if ( !UI_IsLoadOK(UIObject) ) return false;#ifdef __SPMP8000 playTimerInterval = playTimerInterval / 10; cursorTimerInterval = cursorTimerInterval / 10; if(playTimerInterval == 0) playTimerInterval = 1; if(cursorTimerInterval == 0) cursorTimerInterval = 1;#endif flashWin->m_playTimer = SetTimer( flashWin->GetHWND(), TIMER_PLAY, playTimerInterval, 0 ); flashWin->m_cursorTimer = SetTimer( flashWin->GetHWND(), TIMER_CURSOR, cursorTimerInterval, 0 ); return true; }// 停止当前定时器int SI_StopTimer(void){ KillTimer( flashWin->GetHWND(), flashWin->m_playTimer ); KillTimer( flashWin->GetHWND(), flashWin->m_cursorTimer ); return 0;}// 锁定当前FrameBuffer;// 说明:// 因为当前系统是单任务系统,因此该函数暂时不执行任何操作bool SI_LockFrameBuffer(void){ // 当前为单任务系统,不存在FrameBuffer的使用竞争; return true;}// 返回当前用于绘制的FrameBuffer----Shodow Buffervoid *SI_GetLockedFrameBuffer(void){// return (void *)gFrameBufferMgr.mGetShadowBuffAddr(); // 获得物理显示Shadow Buffer return flashWin->GetBits();}// 解锁处于锁定的FrameBuffervoid SI_UnlockFrameBuffer(void){ //?????} 我安装了MSDN Library October 2001。在VC6 中 我按 F1 为啥不能调出MSND 来? 关于左边是树视图,点击树视图条目,右边动态生成一个列表视图,对右边视图切换之后视图内容不见了 如何用位图覆盖一个rect区域 广州C++程序员交流Q群95510377 排序算法??? 能不能实现的..这个问题卡了2天了..一直不知道怎么解决.找不到办法... VC中的热拔插问题 -- 高手帮忙 如何在一个FormView里嵌入ScrollView 我的EXE文件在未装VC的机子上不能运行,为什么? 请问在对话框模式下怎样调用文档! 界面花了,桌面也花了 单文档,将MainFrame的标题栏去掉了,该怎么移动窗口? 进程隐藏
不是说 用 wxWidgets 可以跨平台吗?
----------------
听说过
如果用 python开发 QT 程序,应该是用啥IDE呢??疑惑
在linux下运行的代码。但是vc只支持windows,当然因为它是微软的产品。
只要是支持python都IDE都可以啊,比如eclipse
这个跟IDE无关,跟库有关。
Python 开发时安装了 PyQt,是不是就不需要在单独安装 qt sdk 了?
那怎么办呢? 在Linux运行得用GCC在编译一下??这叫一次编码 到处编译?
1)程序内核尽量是设备无关的;
2)建立设备相关层:不同的平台如Linux、uCOS或eCOS、Windows都只需要修改这里就可以了;其中包含了FrameBuffer处理、多任务的消息机制、内存管理、文件管理、定时器等;设备相关层在不同平台下使用的接口是一致的;
针对Windows系统,详细解释如下:
1)所有显示只使用FrameBuffer,在Windows使用CreateDIBSection可以很容易实现,其他的显示系统都很容易“模拟”FrameBuffer;
2)尽量使用标准的函数库,malloc可以在Linux和Windows下编译通过;(GCC或VC++)我之前是在芯片公司做IP算法的,核心算法可能会同时被要求在多个系统下运行,但多数我喜欢使用Windows,因为调试比较方便;早先写了一个Flash播放器,其源码可以同时在Windows+GDI、uCOS+FrameBuffer及使用MicroWindows+eCOS、DirectFB+Linux下编译;当时作得比较过分,连内存管理都自己重新写了,实际核心程序基本上可以说是纯C++的程序了;
VC的编译结果只能在VC下运行
界面部分可以通过设备相关层隔离开(如FrameBuffer,我的程序基本上就是这样处理的),其他部分如果只涉及标准C++语法,通过适当的编译开关,基本上可以做到在平滑移植(如GCC下直接编译)
只是这种状况下比较难处理的是声音(显示比较好办),通常情况下会使用一个具有统一接口的StreamSound(Linux、Windows等平台都支持StreamSound),然后自己建立一个纯软件的SoundMix解决多Channel协调的问题;
所以多数情况下,即使是嵌入平台,我一定是先用VC++,毕竟调试很方便;然后通过很薄的设备相关层完成跨平台的移植工作;
事实上glut就是使用这样的思路 ----- 与具体窗口无关;只是glut不够轻量,所以,一般我是自己建设备相关层;
extern "C" {
unsigned int SI_GetTime(void)
{
#ifdef __SPMP8000
return cyg_current_time() * 10;
#else
return GetTickCount();
#endif
}// 启动定时器
// 入口参数:
// playTimerInterval FlashPlayer的主定时器,毫秒值
// cursorTimerInterval 光标闪烁定时器,毫秒值
bool SI_StartupTimer( int playTimerInterval, int cursorTimerInterval )
{
if ( !UI_IsLoadOK(UIObject) )
return false;#ifdef __SPMP8000
playTimerInterval = playTimerInterval / 10;
cursorTimerInterval = cursorTimerInterval / 10;
if(playTimerInterval == 0) playTimerInterval = 1;
if(cursorTimerInterval == 0) cursorTimerInterval = 1;
#endif
flashWin->m_playTimer = SetTimer( flashWin->GetHWND(), TIMER_PLAY, playTimerInterval, 0 );
flashWin->m_cursorTimer = SetTimer( flashWin->GetHWND(), TIMER_CURSOR, cursorTimerInterval, 0 ); return true;
}// 停止当前定时器
int SI_StopTimer(void)
{
KillTimer( flashWin->GetHWND(), flashWin->m_playTimer );
KillTimer( flashWin->GetHWND(), flashWin->m_cursorTimer );
return 0;
}// 锁定当前FrameBuffer;
// 说明:
// 因为当前系统是单任务系统,因此该函数暂时不执行任何操作
bool SI_LockFrameBuffer(void)
{
// 当前为单任务系统,不存在FrameBuffer的使用竞争;
return true;
}// 返回当前用于绘制的FrameBuffer----Shodow Buffer
void *SI_GetLockedFrameBuffer(void)
{
// return (void *)gFrameBufferMgr.mGetShadowBuffAddr(); // 获得物理显示Shadow Buffer
return flashWin->GetBits();
}// 解锁处于锁定的FrameBuffer
void SI_UnlockFrameBuffer(void)
{
//?????
}