2011-03-14 67 views
0

我是第三年计算机科学专业的学生。我在Visual C++中被提出并且非常熟练地使用它。然而,我的学校主要在Linux平台上进行教学。到目前为止,我已经在Visual Studio中进行了编程和调试,然后当我确定自己能够正常工作时,我会在Linux中重新编译源代码以确保它在那里工作。在Visual Studio中使用Unix Api编写C/C++?

但现在我的项目需要使用Unix API调用,Berkly套接字和有时使用pthread。

是否有可用的库可以访问Windows上的Unix API?如果是的话,我将如何去使用它们的Visual C++ 2010?

我真的不想使用Gedit和Gdb来调试复杂的(至少对我来说)代码。

+3

欢迎来到现实世界。我们不能总是获得我们想要的开发工具和环境 - 不幸的是。 – 2011-03-14 00:47:26

+0

在虚拟机中运行Linux不是一个选项吗?作为一名学生,学习Linux编程可能会让你对未来的雇主更有吸引力。 – 2011-03-14 01:28:43

+0

问题是我是一个非常直观的学习者;这与学习障碍有关。我还没有找到一个IDE,它是Unix/Linux的原生代码,与Visual Studio具有相同的表现力和功能,特别是在调试时。 不得不使用GDB之类的东西进行调试,使编码速度和调试速度降到最低。 – agent8261 2011-03-14 04:19:39

回答

1

通常,您只需使用在各种库中找到的与平台无关的等价物 - 通常是Boost。但是,如果您的必须使用特定于Unix的API,唯一的办法就是将其功能包装到Windows中。很可能,已经有这样的库来达到这个目的,就像你可以在Unix中使用WINE等一样,但作为一个Windows程序员我自己并不知道。

+0

可能你正在考虑像CygWin这样的东西,但我不认为这是个好主意。 – 2011-03-14 01:05:49

+0

+1表示使用平台无关的解决方案,如提升。 – 2011-03-14 01:29:33

+0

理想情况下,我会使用平台无关的解决方案。但是,当涉及到学校的作业时,我无法选择教授代码如何包含文件。 – agent8261 2011-03-14 04:22:35

0

大多数只有Unix的API不适用于Windows。我建议你切换到Code :: blocks,这是跨平台的。它在很多方面与VC++非常相似,并且很容易习惯它。

0

要么切换到Code :: blocks,要么切换到Eclipse--它们都是多平台的。我可以证明Eclipse 3.6能够在Linux和Windows上调试C++ Qt应用程序。

1

你可以尝试像Cygwin那样在Windows中提供Unix API,在那里编译和编译,然后在转移到Linux时做一些小的调整来使用本地API。

您还可以检查每个库以查看Windows版本是否可用。如果在lib网站上没有列出Win版本,那么Google会查看是否有人为Windows构建了它;这可能会为您提供可用的版本。

如果您不特别需要Unix API,Boost或其他跨平台库可能是您提供所需功能的最佳选择。

对于非Windows开发,寻找替代VS可能是一个好主意(不幸的是,真的没有可以比较的IDE,IMO)。 Code :: Blocks是最近的,但仍然缺少很多功能。 KDevelop多次向我推荐,乍一看似乎很好。 Eclipse可能是唯一比VS2010慢的IDE,在使用之前需要考虑一些。

0

我知道这是晚了,但一个好的答案永远不会太晚!希望我是一个。

我能想到的唯一的事情就是使用预处理器。

#ifdef __unix__ 
    ...UNIX code here 
    #endif 

并在该块中写入UNIX代码,以便您可以在UNIX系统上编译所需的代码。然后,这些块以外,你可以使用类似的块内的WIN32类似物

#ifdef _WIN32 
    ...Windows code here 
    #endif 

使得最终的结果可能看起来像

//Cross platform includes 
//cross platform namespaces 
#ifdef _WIN32 
    //Windows includes 
    //Windows namespaces 
#else 
    //unix includes 
    //unix namespaces 
#endif 

int main() 
{ 
    DoCrossPlatformFunctions(); 

    #ifdef _WIN32 
    DoWindowsFunctions(); 
    #else 
    DoUnixFunctions(); 
    #endif 

    DoMoreXplatformStuff(); 
    return 0; 
} 

你可以做一些简短的研究,并找到类似物的功能你需要相当容易,然后在你的路上。这有点麻烦,但是因为你似乎有一种仇恨,只是把它写在UNIX虚拟机中首先它可能是最好的选择。最好的部分是你不必走出你的Visual C++舒适区来做到这一点。我希望这有帮助!!

相关问题