首頁 >後端開發 >C++ >如何解決 VS2010 中混合 C 和 C 專案中的 LNK2001 連結器錯誤?

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

Linda Hamilton
Linda Hamilton原創
2024-11-01 09:34:02916瀏覽

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

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

問題描述

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

解決方案

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

  1. 模組化程式碼:

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

    • 在頭檔中定義函數(例如functions.h)並在來源檔案中實作它們(例如functions.c)。
  3. 管理出口與匯入:

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

範例程式碼

functions.h

<code class="c">#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</code>

<code class="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
}</code>

其他注意事項

  • 避免在函數宣告中使用外部儲存說明符
  • 利用專案特定的巨集(例如EXPORTFUNCTIONSPROJECT_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)

以上是如何解決 VS2010 中混合 C 和 C 專案中的 LNK2001 連結器錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn