使用非C程序中的C库:是否有必要显式初始化“引擎盖下”的C库?

时间:2012-06-07 10:18:26

标签: c startup libc crt

我知道在编译和链接C程序时,请将其与

链接
  1. C库
  2. C运行时启动代码
  3. 我想知道我是否编写了一个程序(使用新语言,或只是C而不链接到此代码)并将其直接链接到C代码共享库(比如zlib或gsl或fftw或其他东西)并省略C库和C启动代码(假设我的程序将使用它的魔法加载外部lib本身),这会“正常工作”吗?

    我知道在CRT启动中有一些初始化代码,所以我想知道如何在不让我的应用程序本身依赖于C库的情况下调用所需的函数:所以加载外部C库将在那时调用必要的初始化代码(如果有的话,这是问题),否则只需加载OS库/接口。

    我问的原因是我想用一个标准库编写一种语言,该标准库直接挂钩到OS API,不像大多数C ++实现那样构建在C库之上。

2 个答案:

答案 0 :(得分:1)

我使用过许多其他语言的C共享库。是否必须显式初始化共享库取决于库。通常,它会在加载时隐式初始化,但某些库需要额外的初始化。阅读文档。

我的程序代码(C或其他语言)当然也必须初始化,但这是编译器/链接器通常通过默认链接到启动代码来处理的。

答案 1 :(得分:1)

在这里查看https://blogs.oracle.com/ksplice/entry/hello_from_a_libc_free
因此,您可以启动程序而不依赖于任何包含libc的库,然后可以根据需要加载和使用库。