2008-12-15 126 views
2

我試圖用我的程序使用dll,即libcurl,但它沒有鏈接。 Libcurl附帶.h文件,我可以包括(照顧dllimport),但我想我必須指定哪個dll實際使用時,以某種方式連接...我該怎麼做?我與Borland C++ Builder的編譯,但我真的想知道這些東西一般是如何工作的?從C++程序中使用dll。 (borland C++ builder和一般)

編輯: 這是代碼(從捲曲主頁直線C/P)

bool FTPGetFile::ConnectToFTP(string ftpServer){ 
CURL *curl; 
CURLcode res; 
curl = curl_easy_init(); 
if(curl) { 
    curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se"); 
    res = curl_easy_perform(curl); 
    return true; 
}else{ 
    return false; 
} 
} 

這裏是錯誤:

 
[Linker Error] Error: Unresolved external '_curl_easy_init' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ 
[Linker Error] Error: Unresolved external '_curl_easy_setopt' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ 
[Linker Error] Error: Unresolved external '_curl_easy_perform' referenced from C:\PROJECTS\PC\TOOLBOX\DEBUG_BUILD\FTPGETFILE.OBJ 

編輯2:根據建議從joe_muc我已與IMPLIB工具的lib文件和鏈接路徑包括它們。我仍然得到相同的錯誤。

回答

2

如前所述,您將需要與您通過IMPLIB運行 ,結果LIB文件添加到您的項目.dll文件變爲靜態的.lib文件。

如果你已經做到了這則:

  • 您可能需要使用stdcall調用。 您沒有提及您使用的是哪個版本的Builder,但通常在項目選項 - 高級編譯器 - 調用約定下,它通常在 之下。
  • 您可能需要啓用MFC兼容性選項。
  • 它可能是一個名稱mangling問題(項目選項 - C++兼容性選項)。
  • 或產生下劃線或關閉

的libcurl似乎是C代碼

  • 或高級連接器選項 「CASE_INSENSITIVE-聯繫」;但如果它是C++,請注意Microsoft和Borland類通常不兼容。應該有些技巧讓他們工作,但這是一個真正的混亂,我從來沒有取得成功。 C編碼的DLL應該可以工作。

  • 1

    通常情況下,如果您要鏈接到Windows DLL,則需要將DLL或導入庫的名稱傳遞給鏈接器,否則將無法鏈接可執行文件。

    您引用的錯誤消息表明您確實需要指定DLL或導入庫。當您將curl構建爲DLL時,它可能會同時創建.lib和.dll文件。將鏈接器指向.lib文件,並在啓動應用程序時,確保.dll文件位於路徑中的目錄中,以便加載程序可以找到它。

    +0

    添加的代碼和錯誤的問題 – c0m4 2008-12-15 10:26:41

    +0

    我沒有一個的.lib文件,我下載的libcurl預編譯......我已經加入了路徑的dll鏈接。仍然沒有運氣。 – c0m4 2008-12-15 10:48:30

    +0

    我會嘗試自己建立圖書館。這可能是你正在使用的庫是針對++使用的Microsoft鏈接並不一定需要導入庫的Visual C。 – 2008-12-15 10:53:25

    1

    到目前爲止,最常見的解決方案是使用導入庫(.lib),您應該將它作爲構建libcurl的一部分。這告訴(靜態)鏈接器如何爲動態加載準備EXE。

    +0

    .lib與.a相同嗎?我所擁有的僅僅是.a文件,.dll文件和.h文件。 – c0m4 2008-12-15 10:39:36

    0

    您是否嘗試將.h文件添加到您的項目中?

    +0

    是的,.h文件是有 – c0m4 2008-12-15 11:57:27

    2

    在構建器的bin或app目錄中應該有一個名爲IMPLIB.EXE的程序。對dll運行以創建一個.lib文件。

    編輯:Online Docs

    2

    使用「Depends.Exe」來瀏覽.DLL,並找到想要使用的函數的確切名稱,然後爲dll添加.lib文件(或使用borland的implib創建它),幷包括通過右鍵單擊並將其添加到項目中,在bpr項目文件中的.lib文件。然後在你的代碼的頂部,使用__declspec(dllimport)來取悅鏈接神。