2009-02-05 113 views
0

我正在編寫一個程序,該程序可以被某些函數定義擴展。編譯程序的一種方法是創建一個將您的代碼鏈接到主代碼的可執行文件。問題是:要定義的功能之一是可選的,我需要爲此進行測試。在運行時檢查程序中是否存在函數

在Linux上,這裏是我在做什麼:

編譯程序與「-rdynamic」選項,以G ++或「--export動態」選項LD。然後,使用ldsym這樣的:

fct_type myfct = (fct_type)dlsym(RTLD_DEFAULT, "fct"); 

如果功能「FCT」,在程序中存在,這將返回它的地址,否則,返回NULL。

現在,在Windows上,我應該能夠做到這一點:

dll_handle = GetModuleHandle(0); 
fct_type myfct = (fct_type)GetProcAddress(dll_handle, "fct"); 

但沒有「-rdynamic」或「--export動態」選項中的g ++上MINGW32!所以這是行不通的。有沒有人知道在MinGW32上用Windows做什麼?

回答

1

好了,到了最後,我會回答我的問題...

你必須與標誌-Wl,--export-all-symbols鏈接和它的作品...