LNK 2019:win32에서 DLL을 작성했는데 응용 프로그램에서 DLL 인터페이스 함수를 찾을 수 없는 경우
2997 단어 개발 도구
2>test_detect.obj: error LNK 2019: 해석할 수 없는 외부 기호 "declspec(dllimport) void cdecl gdface:: set global run config (bool, bool)"( imp? set global runconfig@gdface@@YAX_N0@Z), 이 기호는 함수main에서 인용됩니다
이상하게도 동적 라이브러리에서 내보낸 함수가 여러 개 있는데, 이 함수만 틀렸고, 생성된 동적 라이브러리 가져오기 파일 (.lib) 을 열었습니다.문자열로 검색하면 set 을 찾을 수 없습니다.global_run_config 함수.이것은 동적 라이브러리를 컴파일할 때 문제가 생겼다는 것을 증명한다.
그런데 왜 하필 이 함수 하나만 문제가 생겼을까?나는 이 함수와 다른 함수의 차이를 자세히 비교한 결과 기호를 정상적으로 내보낼 수 있는 함수가 같은 cpp 파일 A에 있고 이 문제 함수만 다른 cpp 파일 B에 있다는 것을 발견했다.A 파일에는 include 아래의 인터페이스 헤더 파일이 있고 B 파일에는 include 인터페이스 헤더 파일이 없습니다
detect_cl.h
#ifndef FACEDETECT_DETECT_CL_H_
#define FACEDETECT_DETECT_CL_H_
#include
//
#ifdef _WIN32
#ifdef DETECT_CL
#define DETECT_CL_DLL_DECL __declspec(dllexport)
#define DETECT_CL_EXTERN
#else
#define DETECT_CL_DLL_DECL __declspec(dllimport)
#define DETECT_CL_EXTERN
#endif
#else
#define DETECT_CL_DLL_DECL
#define DETECT_CL_EXTERN
#endif
namespace gdface{
DETECT_CL_DLL_DECL gf_rect_def gf_rect_unnormalization( const gf_rect_norm &norm_obj,const gf_int2 &img_size);
DETECT_CL_DLL_DECL object_info_vector& convert_def(object_info_vector& objects, const gf_int2 &img_size);
DETECT_CL_DLL_DECL object_info_vector convert_def(const object_info_vector& objects, const gf_int2 &img_size);
DETECT_CL_DLL_DECL void set_global_run_config(bool debug_show,bool kerne_message);
}/*namespace gdface*/
#endif /* FACEDETECT_DETECT_CL_H_ */
그래서 나는 B 파일의 첫머리에 #include "detect cl.h"를 넣고 정상적으로 컴파일했다.결론은 동적 라이브러리 인터페이스 함수에 대해 컴파일하는 동안 일반 함수와 차이가 있고 연결하는 동안만 있는 것이 아니기 때문에 함수가 있는 cpp/c 파일은 반드시 #include라는 인터페이스 함수의 정의 헤더 파일이어야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로컬 개발 환경을 Git/GitHub 관리로벌써 그 만마. 그 이상도 이하도 아닙니다. 모처럼 헤매어 와 주신 분에게, 본 기사의 골을 알려 드리겠습니다. GitHub에 push하여 잔디 야생 w OS:Windows10 64bit IDE:Eclipse Neo...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.