>  기사  >  백엔드 개발  >  Visual Studio 2010의 별도 C 프로젝트에서 C 함수를 호출할 때 링커 오류를 해결하는 방법은 무엇입니까?

Visual Studio 2010의 별도 C 프로젝트에서 C 함수를 호출할 때 링커 오류를 해결하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-01 09:51:02835검색

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 함수 정의를 포함하는 대신 헤더는 올바른 호출 규칙을 사용하여 extern 함수를 선언해야 합니다. 이러한 함수의 구현은 별도의 C 소스 파일로 이동해야 합니다.

함수 내보내기:

C 함수 내보내기는 C 소스에서 매크로를 정의하여 수행됩니다. 파일. 프로젝트가 컴파일될 때 이 매크로는 내보낸 함수를 정의합니다. C 프로젝트에서는 헤더를 먼저 포함하여 extern 함수를 정의한 다음 해당 함수를 가져온 것으로 표시하기 위한 적절한 매크로를 포함해야 합니다.

권장 파일 구조:

  • functions.h - C의 외부 선언이 포함된 헤더 파일 function
  • 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으로 문의하세요.