首页 > 后端开发 > C++ > 正文

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

Linda Hamilton
发布: 2024-11-01 09:34:02
原创
822 人浏览过

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 宏(自动或手动)。

示例代码

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>
登录后复制

functions.c

<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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!