”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何解决 VS2010 中混合 C 和 C++ 项目中的 LNK2001 链接器错误?

如何解决 VS2010 中混合 C 和 C++ 项目中的 LNK2001 链接器错误?

发布于2024-12-21
浏览:781

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