2010-11-10 57 views
1

我需要在我的項目中包含一個.h文件,該文件將在運行時提供。由於.h文件在鏈接時鏈接,我無法包含.h文件。所以我決定寫一個可以創建.h文件的虛擬程序,然後我會打電話給我的實際程序。無論如何要這樣做。或者任何其他解決方案是可能的我基本上需要在我的程序開始執行之前創建一個.h文件,並且需要將它連接到我的程序。 我實際上應該創建一個由用戶創建的文件,解析該文件,然後創建一個結構,並在該文件中包含字段。例如,如果該文件包含以下數據: - fno:int:4,fname:char :30,ftype:int:4 然後我應該創建一個結構像 struct somename { int fno; char fname[30]; int ftype }; 然後,我應該能夠創建結構的實例創建。這是我喜歡做的從gcc中的另一個程序執行C程序

+0

正如史蒂夫說的 - 不要這樣做。 :-) – 2010-11-10 14:23:51

回答

2

你可以做的是:

  • 創建.h文件中
    • 如果孩子:execve的
    • 如果父親:等待(或不是,取決於你想要做什麼)
0

我會用Makefile;你的程序會在運行時收到頭文件(也許檢查它?),然後execve()命令傳遞文件的名字make

但是,這聽起來非常麻煩;也許你正試圖用錯誤的工具來實現某些東西。也許你想先使用一些腳本?或者寫兩個單獨的程序..?你想做什麼?

+0

我實際上應該創建一個由用戶創建的文件,解析該文件,然後使用該文件中存在的字段創建一個結構。例如,如果該文件包含以下數據: - fno:int:4,fname :char:30,ftype:int:4然後我應該創建一個struct somename {int fno; char fname [30],int ftype};然後,我應該可以創建創建的結構的實例。這就是我喜歡做的事情 – nikhil 2010-11-10 19:52:46

+0

@nikhil:如果你關心性能,考慮使用python並從它內部執行C代碼。你的方法非常困難,因爲你基本上正在嘗試編寫一個解析器來檢查語法並分配內存......祝你好運,避免出現錯誤。 – lorenzog 2010-11-10 21:53:13

3

dlopen是一個解決方案。它允許在運行時加載動態庫。

  • 將您的虛擬程序編譯爲動態庫。
  • 在您的.so上使用dlopen
  • 調用您需要的任何函數,就好像它已經通過gcc鏈接(請參閱dlsym)。
+4

+1還有:不要這樣做。解決真正的問題,而不是你爲自己創造的這個瘋狂的問題,試圖解決真正的問題;-) – 2010-11-10 14:13:09

+0

我同意史蒂夫。 'dlopen'基本上是用於插件的(如果這就是你正在做的事情,我仍然不明白) – log0 2010-11-10 16:30:18