4

我知道当你编译和链接一个 C 程序时,你把它链接到

  1. C 库
  2. C 运行时启动代码

我想知道我是否编写了一个程序(用一种新语言,或者只是 C 而没有链接到这个代码)并将它直接链接到一个 C 代码共享库(比如 zlib 或 gsl 或 fftw 之类的)并省略 C 库和 C 启动代码(假设我的程序将使用它的魔法加载外部库本身),这会“正常工作”吗?

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

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

4

2 回答 2

1

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

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

于 2012-06-07T11:23:46.730 回答
1

看看这里https://blogs.oracle.com/ksplice/entry/hello_from_a_libc_free
这样你就可以在不依赖任何包含 libc 的库的情况下启动程序,然后可以根据需要加载和使用库。

于 2012-06-07T17:48:55.097 回答