2014-11-22 1 views
0

C++ 및 C 오브젝트 파일을 링크하려고하면 링커 오류가 발생합니다. c 오브젝트 파일의 기호를 분석 할 수 없습니다.c 및 C++ 오브젝트 파일 연결

여기 내 콘솔 출력입니다 :

Undefined symbols for architecture x86_64: 
    "PF_OpenFile(char*)", referenced from: 
     snapshot::processItem(workItem) in snapshot.o 
     raid01::raid01(int) in raid01.o 
     raid01::execute_workItem(workItem) in raid01.o 
    "PF_AllocPage(int, int*, char**)", referenced from: 
     snapshot::processItem(workItem) in snapshot.o 
     raid01::raid01(int) in raid01.o 
    "PF_CloseFile(int)", referenced from: 
     snapshot::processItem(workItem) in snapshot.o 
     raid01::raid01(int) in raid01.o 
     raid01::execute_workItem(workItem) in raid01.o 
    "PF_UnfixPage(int, int, int)", referenced from: 
     snapshot::processItem(workItem) in snapshot.o 
     raid01::raid01(int) in raid01.o 
     raid01::execute_workItem(workItem) in raid01.o 
    "PF_CreateFile(char*)", referenced from: 
     snapshot::snapshot(char*) in snapshot.o 
     raid01::raid01(int) in raid01.o 
    "PF_GetThisPage(int, int, char**)", referenced from: 
     snapshot::processItem(workItem) in snapshot.o 
     raid01::execute_workItem(workItem) in raid01.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

여기에 C 오브젝트 파일에 nm의 출력입니다 :

0000000000001730 s EH_frame0 
0000000000001226 s L_.str 
0000000000001242 s L_.str1 
00000000000012a8 s L_.str10 
00000000000012c5 s L_.str11 
00000000000012ed s L_.str12 
00000000000012f8 s L_.str13 
000000000000131a s L_.str14 
000000000000133b s L_.str15 
000000000000135f s L_.str16 
0000000000001384 s L_.str17 
0000000000001398 s L_.str18 
00000000000013aa s L_.str19 
000000000000125d s L_.str2 
00000000000013ba s L_.str20 
00000000000013d2 s L_.str21 
00000000000013de s L_.str22 
00000000000013f0 s L_.str23 
0000000000001405 s L_.str24 
0000000000001430 s L_.str25 
000000000000144b s L_.str26 
000000000000127a s L_.str3 
000000000000127d s L_.str4 
0000000000001281 s L_.str5 
0000000000001283 s L_.str6 
0000000000001285 s L_.str7 
000000000000128e s L_.str8 
0000000000001298 s L_.str9 
0000000000000c70 T _PF_AllocPage 
0000000000001928 S _PF_AllocPage.eh 
00000000000006a0 T _PF_CloseFile 
0000000000001888 S _PF_CloseFile.eh 
0000000000000260 T _PF_CreateFile 
00000000000017c0 S _PF_CreateFile.eh 
0000000000000370 T _PF_DestroyFile 
00000000000017e8 S _PF_DestroyFile.eh 
0000000000000e90 T _PF_DisposePage 
0000000000001950 S _PF_DisposePage.eh 
00000000000008e0 T _PF_GetFirstPage 
00000000000018b0 S _PF_GetFirstPage.eh 
0000000000000920 T _PF_GetNextPage 
00000000000018d8 S _PF_GetNextPage.eh 
0000000000000ae0 T _PF_GetThisPage 
0000000000001900 S _PF_GetThisPage.eh 
0000000000000200 T _PF_Init 
0000000000001798 S _PF_Init.eh 
0000000000000490 T _PF_OpenFile 
0000000000001838 S _PF_OpenFile.eh 
0000000000001120 T _PF_PrintError 
00000000000019a0 S _PF_PrintError.eh 
0000000000001050 T _PF_UnfixPage 
0000000000001978 S _PF_UnfixPage.eh 
       U _PFbufAlloc 
       U _PFbufGet 
       U _PFbufReleaseFile 
       U _PFbufUnfix 
       U _PFbufUsed 
00000000000019f0 S _PFerrno 
0000000000001470 d _PFerrormsg 
0000000000001a00 b _PFftab 
00000000000011c0 t _PFftabFindFree 
00000000000019c8 s _PFftabFindFree.eh 
       U _PFhashInit 
0000000000000000 T _PFreadfcn 
0000000000001748 S _PFreadfcn.eh 
00000000000003f0 t _PFtabFindFname 
0000000000001810 s _PFtabFindFname.eh 
0000000000000100 T _PFwritefcn 
0000000000001770 S _PFwritefcn.eh 
       U ___stderrp 
       U _close 
       U _exit 
       U _fprintf 
       U _free 
       U _lseek 
       U _malloc 
       U _open 
       U _perror 
       U _printf 
       U _read 
0000000000000650 t _savestr 
0000000000001860 s _savestr.eh 
       U _strcmp 
       U _strcpy 
       U _strlen 
       U _unlink 
       U _write 

_로 시작 관련 상징은? 이것이 문제의 원인입니까?

또한 C 파일은 g ++로 -x c으로 컴파일되었습니다 (적절한 경우 dunno).

답변

0

C 링키지와 호환되는 C++ 루틴을 만들어야하는 것처럼 들립니다. 참조 : In C++ source, what is the effect of extern "C"?

+0

어디에 넣었습니까? PF_ * 함수가 선언 된 C 파일의 헤더 또는 함수를 호출하는 C++ 소스? – Roshan

+0

@Roshan 위에 링크 된 질문에 대한 몇 가지 답변이 있습니다. 그 중 하나는 소스 파일에 선언을 배치하는 방법을 자세히 설명합니다. – fbrereto

+0

오, 알았어 .. 시도해 보겠습니다. – Roshan