2012-09-07 1 views
1

배경 정보
Instructions에 따라 GAUL 라이브러리를 빌드하려고합니다.정적 라이브러리에 연결된 DEV-CPP에 콘솔 응용 프로그램을 빌드하는 동안 _imp __ **에 대한 정의되지 않은 참조를 해결하는 방법은 무엇입니까?

문제점
그럼 난 C에서 두 개의 정적 라이브러리, 개발-CPP 윈도우 날에 건설이 7 64 비트, 다른를 참조 하나.

그리고 이들을 테스트하기 위해이를 참조한 콘솔 응용 프로그램을 만들었습니다.

 
> Compiler: Default compiler 
> Building Makefile: "C:\Soft\GAUL\Makefile.win" 
> Executing make... 
> make.exe -f 
> "C:\Soft\GAUL\Makefile.win" all 
> **gcc.exe ../gaul-devel-windows/examples/struggle.o -o "struggle.exe" -L"C:/Dev-Cpp/lib" gaul-util.a gaul-devel.a**  
> 
> gaul-util.a(memory_util.o)(.text+0x2e):memory_util.c: undefined reference to '_imp__mem_chunk_new_real' 
> gaul-util.a(memory_util.o)(.text+0x6c):memory_util.c: undefined reference to '_imp__mem_chunk_free_real' 
> ... 
> gaul-devel.a(ga_core.o)(.text+0x101):ga_core.c: undefined reference to 'slink_free_all' 
> gaul-devel.a(ga_core.o)(.text+0x360):ga_core.c: undefined reference to 'mem_chunk_new_real' 
> ... 
> collect2: ld returned 1 
> exit status 
> 
> make.exe: *** [struggle.exe] Error 1 
> 
> Execution terminated 

나는 그것이 매개 변수가 gcc 명령에 사용되는 함께 할 수있는 뭔가가 생각 :이 컴파일을 시도 잘

내가 점점 로그입니다.

내가 해봤
실제 상태 :
- C의 라이브러리를 복사 : \ 데브 - CPP \ lib에
- 라이브러리 이름 앞에 전체 주소를 사용
- libaries 전에 -l 사용 이름
- 이름 뒤에 .a을 사용하지 않음

그 중 하나와 관련된 결과가 좋지 않습니다.

는 사람이 올바른 방향으로 날 지점 수 있을까요?

미리 감사드립니다.

+1

Dev-C++의 최신 버전은 2005 년에 출시되었습니다. 매우 오래된 컴파일러이므로 최신 버전으로 업그레이드하십시오. –

+0

내가 따라하고있는 튜토리얼에서 언급 한 것이기 때문에 나는 그것을 사용하고 있었다. 컴파일러 권장 사항이 있습니까? – Laggel

+3

예, GNU GCC. * only * 창을 대상으로 할 계획이라면 Visual Studio를 Visual C++ 컴파일러와 함께 사용하는 것을 고려하십시오. – ThiefMaster

답변

0

++ : 빌드가

gcc.exe ../gaul-devel-windows/examples/struggle.o -o "struggle.exe" -L"C:/Dev-Cpp/lib" gaul-util.a gaul-devel.a 

줄에 실패하면 마지막 두 파일의 순서를 반대로 시도 그리고 그것은 단지 효과가있었습니다!

0

링커 (ld)의 인수 순서가 중요합니다. ♦ 내가이 경우 VC에 새로운 빌더를 사용했다 ThiefMaster @로 끝에서

gcc.exe ../gaul-devel-windows/examples/struggle.o -o "struggle.exe" -L"C:/Dev-Cpp/lib" gaul-devel.a gaul-util.a 
+0

방금 ​​시도했습니다. 작동하지 않았습니다! – Laggel

+1

"_imp__mem_chunk_new_real"은 함수 포인터 기호이며 "mem_chunk_new_real"은 함수 자체입니다. 제 말은 동적 링크 라이브러리 (gaul-util은 일부 .dll을 사용할 수도 있음)와 정적 링크 라이브러리 (gaul-devel은 정적 라이브러리의 mem_chunk_new_real을 사용함)를 사용한다는 것입니다. .a 파일에 대한 빌드 프로세스를 다시 한 번 확인하십시오. –