在 Visual Studio 2010 中从单独的 C 项目调用 C 函数时如何解决链接器错误?
Nov 01, 2024 am 09:51 AM从单独的 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 DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)