了解问题:
开发人员尝试从不同 Visual Studio 2010 解决方案中的 C 项目调用 C 函数时遇到链接器错误。尽管使用了 extern 关键字并包含标头,该项目仍无法链接到 C 库,从而导致“无法解析的外部符号”错误。
更正结构:
为了解决该问题,需要重新组织并重命名 C 函数的项目结构。标头不应在标头中包含 C 函数定义,而应简单地声明具有正确调用约定的外部函数。这些函数的实现应移至单独的 C 源文件。
导出函数:
通过在 C 源代码中定义宏来完成导出 C 函数文件。编译项目时,该宏将函数定义为导出的。在 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中文网其他相关文章!