目录
从单独的 VS2010 项目中的 C 代码调用 C 函数时出现链接器错误
首页 后端开发 C++ 在 Visual Studio 2010 中从单独的 C 项目调用 C 函数时如何解决链接器错误?

在 Visual Studio 2010 中从单独的 C 项目调用 C 函数时如何解决链接器错误?

Nov 01, 2024 am 09:51 AM

How to Resolve Linker Errors When Calling C Functions from a Separate C   Project in Visual Studio 2010?

从单独的 VS2010 项目中的 C 代码调用 C 函数时出现链接器错误

了解问题:

开发人员尝试从不同 Visual Studio 2010 解决方案中的 C 项目调用 C 函数时遇到链接器错误。尽管使用了 extern 关键字并包含标头,该项目仍无法链接到 C 库,从而导致“无法解析的外部符号”错误。

更正结构:

为了解决该问题,需要重新组织并重命名 C 函数的项目结构。标头不应在标头中包含 C 函数定义,而应简单地声明具有正确调用约定的外部函数。这些函数的实现应移至单独的 C 源文件。

导出函数:

通过在 C 源代码中定义宏来完成导出 C 函数文件。编译项目时,该宏将函数定义为导出的。在 C 项目中,应首先包含标头以定义外部函数,然后添加适当的宏以将函数标记为已导入。

建议的文件结构:

  • functions.h - 包含 C 函数外部声明的头文件
  • functions.c - 包含函数定义和必要的导出宏的实现文件

示例文件:

functions.h

<code class="c">#pragma once

#if defined(_WIN32)
    #if defined(FUNCTIONS_STATIC)
        #define FUNCTIONS_EXPORT_API
    #else
        #if defined(FUNCTIONS_EXPORTS)
            #define FUNCTIONS_EXPORT_API __declspec(dllexport)
        #else
            #define FUNCTIONS_EXPORT_API __declspec(dllimport)
        #endif
    #endif
#else
    #define FUNCTIONS_EXPORT_API
#endif

#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 statements
}

char *g_fmt(char*, double)
{
    //function statements
}

void freedtoa(char*)
{
    //function statements
}</code>
登录后复制

通过实施这些更改,应该可以解决链接器错误,并且 C 项目将能够成功链接到并调用单独项目中定义的 C 函数。

以上是在 Visual Studio 2010 中从单独的 C 项目调用 C 函数时如何解决链接器错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

两个点博物馆:邦格荒地地点指南
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

两个点博物馆:邦格荒地地点指南
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

c语言函数格式字母大小写转换步骤 c语言函数格式字母大小写转换步骤 Mar 03, 2025 pm 05:53 PM

c语言函数格式字母大小写转换步骤

Gulc:从头开始建造的C库 Gulc:从头开始建造的C库 Mar 03, 2025 pm 05:46 PM

Gulc:从头开始建造的C库

c语言函数返回值的类型有哪些?返回值是由什么决定的? c语言函数返回值的类型有哪些?返回值是由什么决定的? Mar 03, 2025 pm 05:52 PM

c语言函数返回值的类型有哪些?返回值是由什么决定的?

c语言函数的定义和调用规则是什么 c语言函数的定义和调用规则是什么 Mar 03, 2025 pm 05:53 PM

c语言函数的定义和调用规则是什么

C标准模板库(STL)如何工作? C标准模板库(STL)如何工作? Mar 12, 2025 pm 04:50 PM

C标准模板库(STL)如何工作?

c语言函数返回值在内存保存在哪里? c语言函数返回值在内存保存在哪里? Mar 03, 2025 pm 05:51 PM

c语言函数返回值在内存保存在哪里?

distinct用法和短语分享 distinct用法和短语分享 Mar 03, 2025 pm 05:51 PM

distinct用法和短语分享

c语言函数最大公约数最小公倍数是什么 c语言函数最大公约数最小公倍数是什么 Mar 03, 2025 pm 05:55 PM

c语言函数最大公约数最小公倍数是什么

See all articles