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

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

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

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)
最新教學 更多>

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

Copyright© 2022 湘ICP备2022001581号-3