2012-06-07 20 views
4

我知道,當你編譯和鏈接C程序,你從非C程序中使用C庫:是否有必要明確地初始化「底層」C庫?

  1. C庫鏈接它
  2. C運行時啓動代碼

我不知道如果我寫一個程序(在新語言,或只是C而不鏈接到此代碼),並直接將其鏈接到C代碼共享庫(比如zlib或gsl或fftw或其他),並省略C庫和C啓動代碼(假設我的程序將加載外部庫本身使用它的魔法),這將「只是工作」?我知道我在CRT啓動時有一些初始化代碼,所以我不知道如何讓我的應用程序本身不依賴於C庫而調用所需的函數:因此加載外部C庫將在此處調用必要的函數初始化代碼(如果有的話,這是問題),否則只是加載OS庫/接口。

我問的原因是我想用一個標準庫編寫一種語言,它直接掛接到OS API,不像大多數C++實現,它建立在C庫之上。

回答

1

我已經使用了許多其他語言的C共享庫。是否必須顯式初始化共享庫取決於庫。通常,它會在加載時被隱式初始化,但是一些庫需要額外的初始化。閱讀文檔。

我的程序(C或其他語言)的代碼當然也必須初始化,但這正是編譯器/鏈接器通常關心的,默認情況下鏈接到啓動代碼。

+0

這個'我的程序代碼'是如何完全初始化的? –

+0

運行時庫的正常初始化將由編譯器/鏈接器處理。當然,您自己的代碼的初始化是您的責任,並且可以在main()例程中或在main()例程中調用的函數中完成。 –