C ++库是否依赖于C库? (对于GCC和Linux的情况)

时间:2015-10-18 10:58:49

标签: c++ c system

对于GCC和Linux的情况,

我想知道

  • 如果C ++库依赖于C库API。

  • 如果C库包含每个系统调用。

  • 如果C ++库包含所有系统调用。

  • 如果存在提供除C / C ++库以外的系统调用的任何系统库。 (我相信pthread库会产生一些posix线程API)

提前谢谢。

2 个答案:

答案 0 :(得分:3)

  

如果C ++库依赖于C库API。

对于GNU C,是的。这样做可能是有益的,因为许多C标准库函数也是C ++标准的一部分。

  

如果C库包含每个系统调用。

它不包含“单个”,因为系统调用是内核公开的内容。 C库所做的是提供一些围绕系统调用的包装器,但不是,不一定围绕所有这些包装器。有调用系统调用的助手,没有提供包装器。也许在这里开始阅读:syscalls(2)

  

如果C ++库包含每个系统调用。

见上文。

  

如果存在提供除C / C ++库以外的系统调用的任何系统库。 (我相信pthread库会产生一些posix线程API)

是(在你的措辞中添加“包装”一词),你已经举了一个例子。请注意,POSIX线程API不需要内核级线程,但它是在Linux上使用它们实现的。

答案 1 :(得分:2)

是的,GNU C ++库与GNU C库链接。

SELECT distinct 
    mem.id as id,
    mem.last_name as lname ,
    mem.first_name as fname,
    mem.birth_date as birthdate,
    mem.phone_number as phone,
    mem.mobile_number as mobile,
    mem.email_address as email,
    mem.co_address as co,
    mem.street_address as street,
    mem.postal_address as postal,
    mem.country as country,
    (SELECT 
        GROUP_CONCAT(m3.id)
        FROM 
            members m3
        WHERE 
            LOWER(REPLACE(mem.last_name, ' ', '')) = LOWER(REPLACE(m3.last_name, ' ', '')) AND
            LOWER(REPLACE(mem.street_address, ' ', '')) = LOWER(REPLACE(m3.street_address, ' ', '')) AND
            LOWER(REPLACE(mem.postal_address, ' ', '')) = LOWER(REPLACE(m3.postal_address, ' ', '')) AND
            LOWER(REPLACE(mem.country, ' ', '')) = LOWER(REPLACE(m3.country, ' ', '')) AND
            mem.id <> m3.id 
            AND m3.member_type = 1
    ) as lives_together
FROM 
    members mem

WHERE
    member_type = 1
group by co_address,street_address,postal_address,country
ORDER BY
    mem.last_name ASC,
    mem.first_name ASC,
    mem.birth_date DESC