」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何解決 VS2010 中混合 C 和 C++ 專案中的 LNK2001 連結器錯誤?

如何解決 VS2010 中混合 C 和 C++ 專案中的 LNK2001 連結器錯誤?

發佈於2024-12-21
瀏覽:348

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

解決VS2010 中混合C 和C 專案中的連結器錯誤

問題描述

將C 程式碼整合到不同VS2010 專案中的C專案中導致從C 程式碼呼叫C 函數時出現連結錯誤。此錯誤標識為 LNK2001,與未解析的外部符號有關。

解決方案

要修正此問題,請遵循特定準則來確保程式碼庫的正確組織:

  1. 模組化程式碼:

    • 每個C模組應包含一個頭檔和一個原始檔。
    • 保持檔案和巨集命名約定的一致性。
  2. 建立標頭與實作檔案:

    • 在頭檔(例如,functions.h)定義函數並在原始檔(例如,functions.c)中實作它們。
  3. 管理出口和進口:

    • 利用FUNCTIONS_EXPORT_API 巨集用於在頭文件中標記要匯出(或匯入要匯出)的函數。
    • 在使用函數的專案中包含頭檔時,請勿定義 FUNCTIONS_EXPORT_API(或使用其導入值定義巨集)。
    • 在包含函數之前,請確保匯出函數的項目已定義(自動或手動)FUNCTIONS_EXPORT 巨集header.

範例程式碼

functions.h

#pragma once

#define FUNCTIONS_EXPORT_API

#if defined(__cplusplus)
extern "C" {
#endif

FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**);
FUNCTIONS_EXPORT_API char *g_fmt(char*, double);
FUNCTIONS_EXPORT_API void freedtoa(char*);

#if defined(__cplusplus)
}
#endif

functions.c

#define FUNCTIONS_EXPORTS
#include "functions.h"

char *dtoa(double, int, int, int*, int*, char**)
{
    // Function implementation
}

char *g_fmt(char*, double)
{
    // Function implementation
}

void freedtoa(char*)
{
    // Function implementation
}

其他注意事項

  • 避免在標頭內的函數宣告中使用外部儲存說明符。
  • 利用專案特定的巨集(例如 EXPORTFUNCTIONSPROJECT_EXPORTS)來自動化Exports.
  • 驗證預處理器下專案屬性中的巨集名稱定義。

相關問題

  • [CLR Windows 窗體中的LNK2005 錯誤](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA,無法從DLL 找到DLL入口點檔](https://stackoverflow.com/a/7214325/1128974)
  • [在庫中使用fstream 時,我在執行檔中遇到連結器錯誤](https:// stackoverflow.com/a/10068252 /1128974)
  • [C dll匯出未定義](https://stackoverflow.com/a/7709927/1128974)
最新教學 更多>
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-21
  • 如何使用 Prototype.js 實作自動調整文字區域大小的功能?
    如何使用 Prototype.js 實作自動調整文字區域大小的功能?
    使用Prototype 實現自動調整大小的TextArea要增強內部銷售應用程式中的使用者體驗,請考慮向用於送貨地址的文字區域。以下是實現此目的的詳細指南:目標是創建一個可以動態調整其高度以適應文字輸入的文字區域,確保最佳的空間利用率和可讀性。為此,我們將利用 JavaScript 框架 Proto...
    程式設計 發佈於2024-12-21
  • Spring Boot如何配置多個資料來源?
    Spring Boot如何配置多個資料來源?
    在Spring Boot中配置多個資料來源在Spring Boot中,使用多個資料來源可以讓你隔離不同實體的資料存取管理或應用程式。為了實現這一點,使用了 application.properties 檔案和 Bean 配置方法。 application.properties若要新增第二個資料來源,...
    程式設計 發佈於2024-12-21
  • 為什麼 C++ 中的零長度陣列會導致錯誤 2233,如何修復它?
    為什麼 C++ 中的零長度陣列會導致錯誤 2233,如何修復它?
    在 C 中處理「零長度數組」 在 C 中,在遺留程式碼中可能會遇到「零長度數組」的情況。這涉及包含長度為零的陣列的結構。雖然警告被編譯指示抑制,但創建包含此類數組的新結構可能會導致錯誤 2233。為什麼會發生這種情況,可以採取什麼措施來解決它? 使用零長度數組的原因是一個歷史原因允許動態分配數組的...
    程式設計 發佈於2024-12-21
  • 如何設定 HTML `` 標籤的樣式並確保其可見性?
    如何設定 HTML `` 標籤的樣式並確保其可見性?
    HTML標籤的樣式和可見性問題聲明在HTML中,標籤用來定義一個區域可以連結到另一個資源的圖像。然而,使用者在設計樣式並使這些區域始終可見方面遇到了困難。 jQuery 外掛解決方案克服這項挑戰的一種方法是利用 MapHilight jQuery 外掛程式。該插件提供了使用 CSS 懸停效果突出顯示...
    程式設計 發佈於2024-12-21
  • 存取類別中的資料庫物件時如何避免全域變數?
    存取類別中的資料庫物件時如何避免全域變數?
    在類別中使用全域變數建立分頁功能涉及從類別中存取資料庫物件。但是,嘗試存取類別內部的外部變數可能會導致錯誤。讓我們深入研究處理此問題的可能解決方案。 為了解決致命錯誤“在非物件上呼叫成員函數 query()”,資料庫物件需要在類別中可存取。不使用全域變量,更合適的方法是將資料庫物件注入到類別或其方法...
    程式設計 發佈於2024-12-21
  • 如何在C++中產生特定範圍內均勻分佈的隨機數?
    如何在C++中產生特定範圍內均勻分佈的隨機數?
    跨範圍均勻隨機數產生您尋求一種在指定範圍[min, max]內均勻產生隨機數的方法。 rand 的缺陷您目前使用 rand() 和模運算子的實作可能無法確保均勻分佈,因為它的行為取決於 RAND_MAX 和範圍本身。 C 11 和統一範圍產生在C 11 中,std::uniform_int_dis...
    程式設計 發佈於2024-12-21
  • 如何在 Jackson 序列化期間抑制空字段值?
    如何在 Jackson 序列化期間抑制空字段值?
    處理Jackson 序列化中的空字段值Jackson 是一個流行的Java 序列化庫,提供了各種配置選項來定制其序列化行為。常見的情況是抑制空字段值的序列化。這可確保序列化輸出中僅包含非空屬性。 配置 Jackson 進行空值抑制指示 Jackson 忽略 null 有兩種主要方法序列化期間的欄位值...
    程式設計 發佈於2024-12-21
  • JavaScript 如何偵測瀏覽器標籤活動?
    JavaScript 如何偵測瀏覽器標籤活動?
    使用 JavaScript 確定瀏覽器標籤活動在 Web 開發中,通常需要偵測瀏覽器標籤是否正在活躍使用。當選項卡位於背景時,此功能可以透過暫停或最佳化任務來實現高效的資源分配。 確定選項卡活動的一種方法是透過頁面可見性 API。此 API 提供了一個簡單的布林屬性 document.hidden,...
    程式設計 發佈於2024-12-21
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-21
  • C++ 中數組長度有哪些限制以及如何克服它們?
    C++ 中數組長度有哪些限制以及如何克服它們?
    研究 C 中的數組長度限制 儘管 C 數組具有巨大的實用性,但對其大小施加了一定的限制。這些限制的程度取決於幾個因素,即編譯器、系統硬件,甚至數組的資料類型。 可變長度強制與普遍看法相反, C 並沒有嚴格執行數組長度的絕對限制。相反,它依賴編譯器和系統規範來確定最大大小。這種靈活性允許根據硬體功能進...
    程式設計 發佈於2024-12-21
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-21
  • 我們如何有效地將 AST 編譯回可讀的原始碼?
    我們如何有效地將 AST 編譯回可讀的原始碼?
    將AST 編譯回原始碼將抽象語法樹(AST) 編譯回原始碼,通常稱為「漂亮印刷」 , 」對於在AST 轉換後產生人類可讀的代碼至關重要。有兩種主要方法需要考慮:保持原始代碼格式或生成美觀的代碼。一種方法涉及向AST 中的每個節點添加->compile 方法。用原始程式碼取代存取的節點。 &&&]恢復...
    程式設計 發佈於2024-12-21
  • 為什麼IntelliJ編譯成功後顯示「無法解析符號」錯誤?
    為什麼IntelliJ編譯成功後顯示「無法解析符號」錯誤?
    儘管編譯成功,IntelliJ Inspector 錯誤「無法解析符號」IntelliJ 用戶可能會遇到令人困惑的情況,檢查器標記為「無法解析符號」 " 儘管編譯成功,但庫導入錯誤。向Maven 專案新增依賴項時可能會出現此問題,如jmime的情況所示。為其檢查子系統使用單獨的類別路徑。 ...
    程式設計 發佈於2024-12-21
  • SSMS中T-SQL調試時如何查看表格變數值?
    SSMS中T-SQL調試時如何查看表格變數值?
    在偵錯期間查看表格變數值在SQL Server Management Studio (SSMS) 中偵錯Transact-SQL (T-SQL) 程式碼時,檢查儲存在表格變數中的值會很有幫助。然而,標準調試工具並沒有提供直接查看表變數內容的方法。 解決方案:將表格變數轉換為 XML此問題的簡單解決方...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3