【问题标题】:working of libraries图书馆工作
【发布时间】:2012-09-18 12:56:10
【问题描述】:

我曾使用过 和其他通用 c++ 库。除此之外,我还使用过 等库。

现在,我读到操作系统相关的系统调用允许库和硬件上的功能实现之间的接口。这在 的工作中很明显,我们可以在 Linux 中使用但在 Windows 中不能使用。我对此的解释是,在 内部,函数是使用 UNIX 系统调用 定义的,Windows 无法理解。

似乎在 Linux 和 Windows 中都可以正常工作。现在我的问题是,即使
的功能需要根据 Windows 和 Linux 不同的系统调用来定义,那么 如何在两个操作系统上都能正常工作

PS:我知道按照我上面的想法,所有的库(即API)都会根据操作系统进行划分,或者库会针对不同的操作系统以不同的形式出现。

【问题讨论】:

    标签: api operating-system libraries system-calls


    【解决方案1】:

    <iostream> 是 C++ 标准的一部分,它为用户提供了一个接口,以便您可以在不同的操作系统上运行相同的 C++ 代码,尽管它们是通过不同的系统调用实现的。

    <pthreads>POSIX(便携式操作系统接口)标准的一部分,其目的与实现多线程应用程序类似。

    到目前为止一切顺利.. 现在棘手的部分是 Windows 似乎不支持 pthreads 以及大多数其他 POSIX 标准,因为.. 嗯,这是非常规的。它有自己的线程库,例如 win32-threads

    关于操作系统,我想将它们分为两类是公平的,即 windows 和其他类 unix 操作系统(linux、macos、solaris 等)。这并不是说 Windows 是一个邪恶的操作系统,只是它们的目标不同。

    如果您需要一个可移植的多线程应用程序,您可能需要使用更高级别的库,例如 OpenMP(在 Linux 中使用 pthreads 实现,在 Windows 中可能类似于 win32-threads)或 Intel TBB 等等开。

    此外,C++11 将拥有自己的内置线程支持,假设这些 C++ 编译器完全符合标准,您可以在 Windows 和其他环境中以相同的方式安全地使用它。

    编辑:我忘了提一下,有一些项目旨在在 Windows 上实现 POSIX 标准,例如 CygwinInterix(由微软开发,但在 Windows 8 中已弃用)。如果你想在 Windows 中使用<pthreads>,你也可以使用这些。您使用 <pthreads> 函数进行的线程调用将映射到本机 Windows 线程。

    【讨论】:

    • @gokcehan...所以如果我错了请纠正我...(1) C++ 标准库如 对每个函数有两组定义。一组使用 Windows 系统定义函数调用和其他集合使用类 Unix 操作系统系统调用定义函数。要执行的集合由编译器根据运行它的操作系统确定...(2)pthreads 和其他 posix 库只有一组定义使用 unix 系统调用..(3)Cygwin 或 interix 使用与 pthreads 相同的函数签名,但在定义它们时,它们包括 win32-threads 并使用其函数来定义它们。
    • (1) C++ 库头文件,例如<iostream>,作为编译器安装的一部分安装,类似于Linux 上的gcc 或Windows 上的cl.exe(Visual Studio 编译器)。由于gcc 不支持windows(至少本身不支持——如果你想更加困惑,请参阅mingw),反之亦然,在Linux 上存在的<iostream> 头文件中没有对windows 的系统调用系统(在我的电脑上检查过)。 (2) 是的,如果你排除 cygwin 和 interix
    • (3) 我猜是的(无法检查,因为我没有安装它们)(4) 事情并不总是黑白分明,因此松散的理解很可能就足够了大多数用途,除非您是内核黑客。
    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 2012-03-30
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多