"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > VS2010의 혼합 C 및 C++ 프로젝트에서 LNK2001 링커 오류를 해결하는 방법은 무엇입니까?

VS2010의 혼합 C 및 C++ 프로젝트에서 LNK2001 링커 오류를 해결하는 방법은 무엇입니까?

2024년 12월 21일에 게시됨
검색:193

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

VS2010의 C 및 C 혼합 프로젝트에서 링커 오류 해결

문제 설명

C 코드를 다른 VS2010 프로젝트의 C 프로젝트에 통합하면 결과가 발생합니다. C 코드에서 C 함수를 호출할 때 링크 오류가 발생합니다. LNK2001로 식별된 오류는 해결되지 않은 외부 기호와 관련되어 있습니다.

해결 방법

이 문제를 해결하려면 특정 지침을 준수하여 코드베이스가 올바르게 구성되었는지 확인하세요.

  1. 모듈화 코드:

    • 각 C 모듈은 하나의 헤더 파일과 하나의 소스 파일로 구성되어야 합니다.
    • 파일과 매크로 모두에 대한 명명 규칙의 일관성을 유지합니다.
  2. 헤더 생성 및 구현 파일:

    • 헤더 파일(예: function.h)에서 함수를 정의하고 소스 파일(예: function.c)에서 구현합니다.
  3. 수출 및 수입 관리:

    • FUNCTIONS_EXPORT_API 매크로는 헤더 파일에서 내보내기(또는 가져오기)할 함수를 표시합니다.
    • 함수를 사용하는 프로젝트에 헤더를 포함할 때 FUNCTIONS_EXPORT_API를 정의하지 마십시오(또는 가져오기 값으로 매크로를 정의하십시오).
    • 함수를 내보내는 프로젝트에 FUNCTIONS_EXPORT 매크로가 정의되어 있는지(자동 또는 수동으로) 확인하세요. header.

예제 코드

functions.h

#pragma once

#define FUNCTIONS_EXPORT_API

#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
#pragma 한 번 #FUNCTIONS_EXPORT_API 정의 #정의된 경우(__cplusplus) 외부 "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*); #정의된 경우(__cplusplus) } #endif

functions.c

#pragma once

#define FUNCTIONS_EXPORT_API

#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
#define FUNCTIONS_EXPORTS #include "functions.h" char *dtoa(double, int, int, int*, int*, char**) { // 함수 구현 } 문자 *g_fmt(문자*, 더블) { // 함수 구현 } void freedtoa(문자*) { // 함수 구현 }

추가 고려 사항
  • 헤더 내 함수 선언에 extern 저장소 지정자를 사용하지 마세요.
  • 자동화하려면 프로젝트별 매크로(예: EXPORTFUNCTIONSPROJECT_EXPORTS)를 활용하세요. 내보내기.
  • 전처리기 아래의 프로젝트 속성에서 매크로 이름을 확인하세요. 정의.

관련 문제
  • [CLR Windows Form의 LNK2005 오류](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA, DLL에서 DLL 진입점을 찾을 수 없습니다. 파일](https://stackoverflow.com/a/7214325/1128974)
  • [라이브러리에서 fstream을 사용할 때 실행 파일에서 링커 오류가 발생합니다](https://stackoverflow.com/a/10068252 /1128974)
  • [C dll 내보내기 정의되지 않음](https://stackoverflow.com/a/7709927/1128974)

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3