문제 이해:
개발자 다른 Visual Studio 2010 솔루션의 C 프로젝트에서 C 함수를 호출하려고 할 때 링커 오류가 발생했습니다. extern 키워드를 사용하고 헤더를 포함했음에도 불구하고 프로젝트가 C 라이브러리에 연결하지 못하여 "해결되지 않은 외부 기호" 오류가 발생했습니다.
구조 수정:
이 문제를 해결하려면 C 함수의 프로젝트 구조를 재구성하고 이름을 바꿔야 합니다. 헤더에 C 함수 정의를 포함하는 대신 헤더는 올바른 호출 규칙을 사용하여 extern 함수를 선언해야 합니다. 이러한 함수의 구현은 별도의 C 소스 파일로 이동해야 합니다.
함수 내보내기:
C 함수 내보내기는 C 소스에서 매크로를 정의하여 수행됩니다. 파일. 프로젝트가 컴파일될 때 이 매크로는 내보낸 함수를 정의합니다. C 프로젝트에서는 헤더를 먼저 포함하여 extern 함수를 정의한 다음 해당 함수를 가져온 것으로 표시하기 위한 적절한 매크로를 포함해야 합니다.
권장 파일 구조:
예 파일:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!