2011-02-24 9 views
1

안녕하세요 저는 인턴십 학생이고 저는 Linux C에서 Visual C로 프로그램을 포팅하고 있습니다. Berkeley DB와 Visual C++를 사용해야합니다. 오류 LNK2019 : 잠시 동안 시도한 후, 나는 연결 오류를Berkeley DB 및 Visual C++에서 링커 오류가 발생했습니다.

berkeleyDB.obj을 얻을? 확인되지 않은 외부 기호 "INT __cdecl database_select_end (서명 INT 부호없는 INT, 구조체 청크 * CONST, INT)"(database_select_end을 @@ YAHIIQAUchunk @@ H @ Z) berkeleyDB.obj : 오류 LNK2019 : 확인되지 않은 외부 기호 "void (")를 사용하여 "void __cdecl op_ds_bulk (unsigned int, unsigned int *, int)"참조 된
함수 "void __cdecl op_ds_bulk (unsigned int, unsigned int *, int)"에서 참조되는 __cdecl database_sync (void) "(? database_sync @@ YAXXZ)
berkeleyDB.obj : 오류 LNK2019 : 확인되지 않음 외부 기호 "void __cdecl database_insert_bluk (s 함수 "void __cdecl op_ds_bulk (unsigned int, unsigned int *, int)"에서 참조되는 (? t_chunk *, int) "(? database_insert_bluk @@ YAXPAUchunk @@ H @ Z)
berkeleyDB. OBJ : 오류 LNK2019 : 확인되지 않은 외부 기호 "INT __cdecl database_open (INT, 숯불 *)"(? database_open @@ YAHHPAD @ Z)

_main 함수에서 참조는 사람들을 무엇 아무 생각이 pls는 저에게

을 도울

답변

1

그들은 C++ - mangled (또는 '장식') 함수 이름입니다. C++은 함수 오버로딩 (같은 이름이지만 다른 매개 변수 시그니처가있는 여러 함수)을 허용하므로 링크 시간에 여러 오버로드를 구분하기 위해 매개 변수 등을 함수 이름으로 인코딩해야합니다. 대부분의 경우 DB 라이브러리는 C로 작성되었으며 데코 레이팅 된 이름을 갖지 않습니다.

당신의 db.h 포장 시도는 C 함수가 아닌 C++과 API를 치료하기 위해 컴파일러에게하는 extern "C"

extern "C" 
{ 
    #include <db/db.h> 
} 

에 포함.

(당신이 너무에 오타가있어 것 같습니다 :. database_insert_bluk하지 _bulk) 또는

, 당신이 포팅하는 경우 있지만 그것은하는 C++의 인터페이스 #include <db/db_cxx.h> 대신 사용할 수 버클리 DB 배처럼 보인다 코드를 사용하면 C 인터페이스를 사용하는 것이 더 쉬울 수 있습니다. 차이점은 아마도 포팅하는 리눅스 코드가 C로 컴파일 된 반면 여기에서는 C++로 컴파일된다는 것입니다.

the other comment you've posted : 실제로 Berkeley DB에 연결하지 않는 것이 문제라면 프로젝트 설정 (프로젝트 이름을 마우스 오른쪽 단추로 클릭), C++ 링크 탭을 클릭 한 다음 .lib 파일을 라이브러리 목록에 추가하여 프로젝트에 링크하십시오. 이 경로를 찾으려면 경로를 지정해야 할 수도 있습니다. 디버그 모드와 릴리스 모드 (설정 상단의 드롭 다운) 모두에 대해이 작업을 수행해야합니다.

+0

답장을 보내 주셔서 감사합니다. 하지만이 #include 내 extern "C"넣을 때 오류 메시지 : 'db/db.h'포함 파일을 열 수 없습니다. 나는 많은 lib 파일을 연결하려고 시도했지만 여전히 오류를 보여주고있다. 나는 정확한 방법을 모른다. 당신은 나에게 단계 힌트로 몇 걸음을 줄 수 있습니까? 미리 감사드립니다 !!! – kevin

+0

오 OK - 잘못된 헤더 파일 이름이나 경로가 있으면 죄송합니다. Berkeley DB 헤더는 일반적으로 db.h 또는 이와 비슷한 것으로 - 소스의 어딘가 또는 포함하는 다른 파일 중 하나에 이미 포함시킬 것입니다. 당신은 이것을 찾아서 'extern "C"' – Rup

관련 문제