2011-11-15 151 views
2

我想问一些关于在Unix上编写C++而不是Windows的具体问题。从Windows开始在Unix上开发C++,本地函数调用?

  1. 在Windows中,调用本地OS的功能,你通常链接到一个.dll或包括WINDOWS.H 同样,你怎么请参阅Unix的底层操作系统的功能呢?

  2. 是否有关于Unix内所有底层OS函数的参考指南? (这样可以看到哪些功能可用)。

  3. 什么是“包含”boost库的最佳方法?要使用像eclipse C/C++版本那样的IDE,并且像Windows那样包含boost?

谢谢

+0

手册页是'nix中的朋友。 – AusCBloke

+0

“包含”Boost库的最佳方法是使用您选择的* nix发行版的包管理器(红帽上的“yum”,Ubuntu上的“apt-get”)来安装Boost开发包。 –

+0

您可能会发现这些SO问题很有用:http://stackoverflow.com/questions/2672470/where-can-i-obtain-a-list-of-unix-system-calls,http://stackoverflow.com/questions/24109/c-ide-for-linux&http://stackoverflow.com/questions/1089490/eclipse-cdt-how-to-reference-3rd-party-includes-via-a-relative-path –

回答

1

在Unix系统上,Unix函数通常在libc中与C标准库一起使用。编译器会自动将它链接到您的可执行文件,通常是一个“共享库”,它有点像Windows DLL,但也不完全一样。

至于要包含的头......大多数Unix系统都带有命令行man命令,该命令允许您拉出有关各种调用的手册页。这些手册页通常会提到您需要使用特定功能的标题。

有一些特殊功能是作为系统调用实现的。对于一般的C程序员来说,特定函数是系统调用的事实是一个实现细节。但是通常值得注意的是这些功能究竟是什么,因为它们可以帮助您了解操作系统为您做了什么,以及您正在使用的库所做的工作。在Windows上这种区分往往很难确定。

大多数Unix程序员仍然使用make和命令行工具。这意味着没有IDE设置或任何东西。你将不得不弄清楚通过编译器的标志。这通常不是那么困难。另外,大多数Unix系统不会在整个文件系统中安装软件。如果它是已安装软件包的一部分的包含文件,它将位于/ usr/include目录中。这意味着你将不必神奇地推断Boost包含文件的位置。他们将一起在/ usr/include中。

虽然你可能需要究竟哪些Boost库找出你需要(如-lboost_filesystem),所有的Boost库将在/usr/lib,或者/usr/lib64与所有其他库,这样你就不会要搞清楚哪里他们是。

+0

如果你对那个特别的导演解除压力,那么这些地点会不会是? – user997112

+0

@ user997112:好吧,是的,不。一般来说,如果你可以帮忙的话,你不应该手动安装助推器。几乎所有的Linux发行版都包含某种包管理,几乎所有的发行版都有一个提升包。而且,恕我直言,如果你手动安装boost,你应该运行它的安装指令并将它们指向'/ usr/local',这意味着包含文件将放在'/ usr/local/include'中标准搜索路径。 – Omnifarious

+0

@ user997112:在Unix系统上,每个地方都有一个标准位置。 '/ usr/local'是一个没有被包管理系统管理的东西。 – Omnifarious

1
  1. 没有单一的头,你可以包括能够访问所有* nix的功能;请参阅第2,3或3节中的相应手册页以了解相关功能,以便确定您需要哪些标题和库。

  2. 每个* nix都倾向于遵循不同程度的POSIX或SUS

  3. ...什么?

2

1)没有单个头文件。您不直接调用系统调用,而是通常通过标准c库(如fopen)间接调用它们(在fopen的情况下,您也可以调用打开的底层函数,但这会使程序的可移植性降低)。提到你指的是哪个系统调用会有帮助

2)这听起来像你是Unix平台开发的新手。我强烈推荐Richard Stevens的“UNIX环境下的高级编程”。

3)您应该熟悉make实用程序。通常由您的IDE隐藏在窗口中的东西。另外,boost库带有示例程序。

+0

关于#1:我并不是建议有一个文件允许包含,我只是问你如何调用底层的OS功能?你是否简单地调用函数? – user997112

+0

是的,你只需调用函数即可。手册页会告诉你要包含什么头文件。 – bames53