2012-08-13 21 views
1

Im使用Eclipse,DDT插件和DMD 2.06作爲編譯器。當我嘗試使用像dlopen這樣的函數時,dlsym usw會在C和GCC中得到「未解決的引用」錯誤,我通過與-ldl,-lsdl usw鏈接來修復它們,但是DMD2編譯器沒有這樣的選項,是還有另一種方式來鏈接特定的圖書館?DMD2(D語言)如何鏈接一個C庫(libdl.so.2)

順便說一句,我定義的C函數如下方式

extern(C) 
    { 
     /* From <dlfcn.h> 
     * See http://www.opengroup.org/onlinepubs/007908799/xsh/dlsym.html 
     */ 

     const int RTLD_NOW = 2; 

     void *dlopen(const(char)* file, int mode); 
     int dlclose(void* handle); 
     void *dlsym(void* handle, const(char*) name); 
     const(char)* dlerror(); 
    } 

會高興的任何幫助。

回答

1

只要通過-L-ldl

此外,您不需要重新定義所有這些。它們可在core.sys.posix.dlfcn模塊中獲得。

+0

thanks -L-ldl works – 2012-08-13 18:00:02

2

d確實有鏈接的pragma:

pragma(lib, "dl"); 

這將導致DMD發射 「-L-LDL」(或系統相應的鏈接標記)給鏈接器。如果鏈接器對命令敏感(如ld所示),則需要按照手動將它們傳遞的順序指定編譯指示。