从非C程序中使用C库:是否需要显式初始化“底层”C库?

4

我知道在编译和链接C程序时,需要链接以下两个东西:

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

我想知道,如果我写一个程序(用一种新语言或者只是C语言,但不连接到这些代码),并直接将其链接到一个C共享库(比如zlib、gsl、fftw等),省略C库和C启动代码,假设我的程序会使用自己的“魔法”来加载外部的库,那么这样做是否“可行”?

我知道CRT startup中有一些初始化代码,所以我想知道如何调用所需的函数,而不必让我的应用程序依赖于C库:因此,在那个点上,加载外部的C库将调用必要的初始化代码(如果有的话),否则只会加载OS库/接口。

我提出这个问题的原因是,我想编写一个带有标准库的语言,它直接钩取操作系统API,与大多数C++实现不同,后者是在C库之上构建的。

2个回答

1

我曾经在其他语言中使用过C共享库。是否必须显式初始化共享库取决于库本身。通常情况下,它会在加载时隐式初始化,但有些库需要额外的初始化。请阅读文档。

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


您的运行库的正常初始化将由编译器/链接器负责。您自己代码的初始化当然是您的责任,可以在main()例程中完成,或者在由main()例程调用的函数中完成。 - Rudy Velthuis

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接