vc 写得程序只能在Windows上运行? 可以跨平台吗?

解决方案 »

  1.   

    VC有编译选项上有选择目标机器的,如CE系统..
      

  2.   

    你想移植到哪个平台?Linux?
      

  3.   


    不是说 用 wxWidgets 可以跨平台吗?
      

  4.   

    wxWidgets
    ----------------
    听说过
      

  5.   

    vc是一个C/C++编译器,这个编译器只能产生在windows平台下运行的代码,不能跨平台。
      

  6.   

    如果用 python开发 wxPython 程序, 可以使用 BOA IDE(BOA就是用WxPython编写的) 
    如果用 python开发 QT 程序,应该是用啥IDE呢??疑惑
      

  7.   

    wxWidgets 可以用VC编译器产生windows下运行的代码,wxWidgets也可以用gcc编译器产生
    在linux下运行的代码。但是vc只支持windows,当然因为它是微软的产品。
     
      

  8.   


    只要是支持python都IDE都可以啊,比如eclipse
    这个跟IDE无关,跟库有关。
      

  9.   

    Python 开发时安装了 wxpython,是不是就不需要在单独安装 wxWidgets了?
    Python 开发时安装了 PyQt,是不是就不需要在单独安装 qt sdk 了?
      

  10.   

    Python 开发时安装了 wxpython,是不是就不需要在单独安装 wxWidgets了?是的,不需要安装。Python 开发时安装了 PyQt,是不是就不需要在单独安装 qt sdk 了?不清楚,没用过PyQt。
      

  11.   

    我只是用C++标准类库,并且用wxWidgets做界面,应该可以跨平台吗?
      

  12.   


    那怎么办呢? 在Linux运行得用GCC在编译一下??这叫一次编码 到处编译?
      

  13.   

    可以肯定的讲,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++的程序了;
      

  14.   

    Qt,wxWidgets本身就是c/c++跨平台的典范了啊,其它的比如 VTK,OGRE,libpcap 都是跨平台的,楼主可以阅读它们的文档了解它们如何跨平台的。
      

  15.   

    照这么说,Qt,wxWidgets 也只是源码级跨平台
      

  16.   

    从来就只有源码级跨平台,用虚拟机的就算了,比如JAVA,顶多算个中间代码跨平台
      

  17.   

    VC 主要是针对于Windows的,如果不涉及的界面,用VC 进行代码编辑,然后在到其他平台编译和调试。
    VC的编译结果只能在VC下运行
      

  18.   


    界面部分可以通过设备相关层隔离开(如FrameBuffer,我的程序基本上就是这样处理的),其他部分如果只涉及标准C++语法,通过适当的编译开关,基本上可以做到在平滑移植(如GCC下直接编译)
    只是这种状况下比较难处理的是声音(显示比较好办),通常情况下会使用一个具有统一接口的StreamSound(Linux、Windows等平台都支持StreamSound),然后自己建立一个纯软件的SoundMix解决多Channel协调的问题;
    所以多数情况下,即使是嵌入平台,我一定是先用VC++,毕竟调试很方便;然后通过很薄的设备相关层完成跨平台的移植工作;
    事实上glut就是使用这样的思路 ----- 与具体窗口无关;只是glut不够轻量,所以,一般我是自己建设备相关层;
      

  19.   

    发一个简单示例(我自己程序的一个片段,这个程序源码不需要改动可以直接在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 Buffer
    void *SI_GetLockedFrameBuffer(void)
    {
    // return (void *)gFrameBufferMgr.mGetShadowBuffAddr(); // 获得物理显示Shadow Buffer
    return flashWin->GetBits();
    }// 解锁处于锁定的FrameBuffer
    void SI_UnlockFrameBuffer(void)
    {
        //?????
    }
      

  20.   

    我安装了MSDN Library   October   2001。在VC6 中 我按 F1 为啥不能调出MSND 来?