2014-03-31 103 views
1

我打算在FPC中編寫一個庫,該庫可以鏈接到其他編譯器。動態鏈接(.so,.dll)是沒有問題的,但是,從(至少)gcc和/或clang靜態鏈接的需求已經出現。在Freepascal中創建一個靜態鏈接庫

不知何故,最後,我需要一個包含所有FPC內部函數的對象存檔,是否正確?鏈接到libc(cmem,cthreads等)而不是FPC實現看起來是一種要求,但還有什麼是實現這一目標的最有效和跨平臺的方式?

使用的FPC是2.7(幹線)。

在此先感謝。

編輯:一些已經取得進展here(德語,也看到我的評論有鏈接的回購),但它給我的印象不太優雅,也不簡單。還有問題Marco提出的初始化/定稿...

回答

0

那麼,理論上你將每個.o連接到AR,然後在啓動時調用FPC_INITIALIZEUNITS,在關閉時調用FPC_FINALIZEUNITS。

但是,FPC可能會在mainmodule中生成一些信息(如帶有所有單元ini/fin例程的地址表)。我不能很快想到一個解決方案。

+0

約FPC_INITIALIZEUNITS好一點。我已經更新了BenBE和我在此期間取得的進展,但我認爲我們完全忽略了這一點。關於代碼只是爲了完整構建而生成的,我們可以通過構建一個庫,然後使用主要對象從中提取一些部分來解決這個問題。但這不可能是最好的解決方案。 – Martok

0

我有類似的問題,發現this tutorial真的很有幫助。它基本上是爲iOS開發編寫的,聽起來會更棘手,但對於常規C/C++鏈接來說工作得很好。

在我的情況下,被用於創建靜態庫遺留的Delphi項目:

fpc -Cn -Mdelphi xxx.dpr 
ar -q libxxx.a `grep "\.o$" link.res` 
ranlib libxxx.a