"Error LNK2019 : 해결되지 않은 외부 기호"를 어떻게 해결할 수 있습니까? [복제하다

StackOverflow https://stackoverflow.com/questions/849238

문제

내 임베디드 데이터베이스가 있어야하는이 MFC 응용 프로그램이 있습니다. 그래서 나는 매끄럽고 빠른 "임베드 가능한"데이터베이스를 위해 사냥을 갔고 SQLITE를 우연히 발견했습니다.

나는 그것으로 DB를 만들었고 Visual Studio 2008과 함께 정적 라이브러리 프로젝트를 만들었습니다. 도서관 프로젝트는 다른 주요 프로젝트에서 사용될 것입니다.

도서관 프로젝트에서 수업을 만들었습니다 DBClass 방법으로 AddFeedToDB(CFeed f). 도서관 프로젝트는 .lib CodeProject의 파일 (cppsqlite3.lib).

정적 라이브러리를 컴파일 할 때 오류가 감지되지 않지만 기본 프로젝트에서 라이브러리 프로젝트 파일을 사용하려고하면 이러한 유형의 오류가 발생합니다.

error LNK2019: unresolved external symbol "public:void __thiscall
   CppSQLite3DB::close(void)" (?close@CppSQLite3DB@@QAEXXZ 
   referenced in function "public: int __thiscall
   CTalkingFeedsDB::AddFeedToDB(class CFeed,char const*)" (?
   AddFeedToDB@CTalkingFeedsDB@@QAEHVCFeed@@PDB@Z

내가 무엇을 놓치고 있습니까?

도움이 되었습니까?

해결책

내가 상징이라고 생각한 것은 두 번 이상 내게 일어났다 XXX (즉 ?close@CppSQLite3DB@@QAEXXZ) ~였다 수입 lib에서 실제 기호는 __impXXX (즉 __imp?close@CppSQLite3DB@@QAEXXZ).

그런 다음 링커 오류의 이유는 컴파일 단계에서 찾을 수 있습니다. 컴파일러가 ?close@CppSQLite3DB@@QAEXXZ 가져올 기호, 어디에나 ~해야 한다 생성하다 __imp?close@CppSQLite3DB@@QAEXXZ. 이것은 종종 기능 선언 자체에 __declspec( dllimport ). 이는 일부 사전 처리기 기호가 정의되지 않은 것에 의해 야기 될 수 있습니다. 아니면 그 __declspec 전혀 거기에 있지 않습니다 ...

다른 팁

나는이 질문 이후 이미 2 년이라는 것을 알고 있지만 ... 나는 여기에서 같은 상황에 처해있다. 모든 헤더 파일을 추가했습니다 ... LIB 디렉토리를 추가 하고이 오류가 계속됩니다. 그래서 구성 속성 -> 링커 -> 입력 -> aditional dependencies에 Lib를 수동으로 추가했으며 모든 것이 작동합니다.

그것이 당신의 경우인지 모르지만 IMP 접두사는 Win32 프로젝트에서 x64 라이브러리를 컴파일한다는 것을 의미 할 수 있습니다.

CodeProject SQLite Lib를 실행 파일에 연결하거나 프로젝트에 소스 파일을 직접 포함시켜야합니다. (어느 쪽을 했습니까?)

나는 다음 단계를 따를 것이다 :

  1. 기호를 내보낼 것으로 예상되는 라이브러리 또는 .OBJ 파일에 대해 생각해보십시오.

  2. 실제로 있는지 확인하십시오 하다 바로 그 기호를 내보내십시오 (문자 별 확인). 때로는 전화 규칙이 다릅니다.

  3. 기호를 포함 할 라이브러리가 링커에 알려진지 확인하십시오 - 먼저 '추가 라이브러리'를 확인한 다음 라이브러리가 실제로 발견되었는지 확인하십시오 (대부분 Sysinternals에서 filemon.exe를 사용 하여이 작업을 수행하고 링크를 찾으십시오. .exe lib 파일을 엽니 다.)

잠시 생각하면 도서관 프로젝트가 ~ 아니다 기능을 찾는 기능을 수출합니다. 이 기능은 데이터베이스 lib에 있습니다. 해당 LIB를 주요 프로젝트에 추가해야합니다. 정적 LIB 프로젝트에 추가하는 것은 사용하지 않습니다.

컴파일러와 링커는 하나의 라이브러리를 다른 라이브러리로 연결하지 않습니다 (하나가 DLL이 아닌 한). 메인 프로젝트에서 두 라이브러리 (CPPSQLITE3.LIB 및 자체 정적 라이브러리)를 지정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top