2016-08-04 1 views
-1

그래서 저는 일하고 있던 4 년 된 프로젝트를 다시 만들려고하고 있지만 현재는 문제가 발생하고 있습니다. 컴파일 관련 문제를 해결할 수 있었지만 지금은 OpenGL 호출과 링커 문제가 있습니다."glBegin '에 대한 정의되지 않은 참조를 이전에 작업중인 프로젝트로 가져 오려면 make 파일에서 무엇을 업데이트해야합니까?

다른 점은 이제 freeglut 대신 freeglut3이고 libsdl-mixer 대신 libsdl-mixer1.2입니다.

LDFLAGS 섹션에서 업데이트해야 할 것이 있습니까 ??? 메이크의

다음

세그먼트 :

CC=g++ 

# The _POSIX_* symbols only come into play on systems that are POSIX 
# but not SUS. 
# SUS3=-D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=600 
HARDEN=-D_FORTIFY_SOURCE 
TESTING=-D_FLAT_WORLD 
CFLAGS= -pg -g `sdl-config --cflags --libs` -fpermissive 
LDFLAGS=-lGLEW -lGL -lGLU -lglut -lpthread -lSDL_mixer 

ALL=mech 

mech: $(ALL) 

# ------------------------------------------------------- 
run.o: ../run.cc ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

debug.o: ../debug.cc ../debug.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

world.o: ../world.cc ../world.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

gameRoot.o: ../gameRoot.cc ../gameRoot.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

gameState.o: ../gameState.cc ../gameState.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

initGame.o: ../initGame.cc ../initGame.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

controls.o: ../controls.cc ../controls.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

levelManager.o: ../levelManager.cc ../levelManager.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

thread.o: ../thread.cc ../thread.h 
    $(CC) $(CFLAGS) -c $< 

# ------------------------------------------------------- soundMngr 
gmAudioPlayer.o: ../soundMngr/gmAudioPlayer.cc ../soundMngr/gmAudioPlayer.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

gmAudioLoader.o: ../soundMngr/gmAudioLoader.cc ../soundMngr/gmAudioLoader.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

# ------------------------------------------------------- MD5 
md5anim.o: ../md5/md5anim.cc ../md5/MD5Model.h ../commonStrc.h ../md5/md5head.h 
    $(CC) $(CFLAGS) -c $< 

md5mesh.o: ../md5/md5mesh.cc ../md5/MD5Model.h ../commonStrc.h ../md5/md5head.h 
    $(CC) $(CFLAGS) -c $< 

MD5Model.o: ../md5/MD5Model.cc ../md5/MD5Model.h ../commonStrc.h ../md5/md5head.h 
    $(CC) $(CFLAGS) -c $< 

# ------------------------------------------------------- myLib 
myCorePoint.o: ../myLib/myCorePoint.cc ../myLib/myCorePoint.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

myVec.o: ../myLib/myVec.cc ../myLib/myVec.h 
    $(CC) $(CFLAGS) -c $< 

myVert.o: ../myLib/myVert.cc ../myLib/myVert.h 
    $(CC) $(CFLAGS) -c $< 

myCam.o: ../myLib/myCam.cc ../myLib/myCam.h 
    $(CC) $(CFLAGS) -c $< 

myTexMngr.o: ../myLib/myTexMngr.cc ../myLib/myTexMngr.h 
    $(CC) $(CFLAGS) -c $< 

myVerBall.o: ../myLib/myVerBall.cc ../myLib/myVerBall.h 
    $(CC) $(CFLAGS) -c $< 

MyCoor3.o: ../myLib/MyCoor3.cc ../myLib/MyCoor3.h 
    $(CC) $(CFLAGS) -c $< 

MyMatr4.o: ../myLib/MyMatr4.cc ../myLib/MyMatr4.h 
    $(CC) $(CFLAGS) -c $< 

.... some more stuff I cut out ..... 

bbFinder.o: ../org/bbFinder.cc ../org/bbFinder.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

pathFinder.o: ../org/pathFinder.cc ../org/pathFinder.h ../commonStrc.h 
    $(CC) $(CFLAGS) -c $< 

# -------------------------------------------------------- 

mech: run.o debug.o world.o gameRoot.o gameState.o initGame.o controls.o levelManager.o thread.o gmAudioLoader.o gmAudioPlayer.o md5anim.o md5mesh.o MD5Model.o myVert.o myVec.o myCorePoint.o myCam.o myTexMngr.o myVerBall.o MyCoor3.o MyMatr4.o hud.o pauseScreen.o rotSeg.o mechLeg.o gameBound.o particle.o particleGroup.o BBHier.o BBox.o bSphere.o Missile.o drunk.o homing.o pHoming.o miniMis.o hydra.o buildingBlock.o Projectile.o explosion.o bBin.o bCone.o binIndices.o tiltBlock.o core.o blast.o pseudoModel.o pseudoReader.o pseudoParts.o pseudoMech.o turret.o actor.o hover.o pseudoPlayer.o mechAI.o misCan.o font.o flatFog.o env.o healZone.o amoZone.o itemGen.o materialPreset.o mainMenu.o controlMenu.o menuMngr.o lvlSelect.o shader.o mouseFix.o ctrlBox.o linThread.o winThread.o bbFinder.o pathFinder.o 
    $(CC) -pg $(LDFLAGS) -o [email protected] $^ 

clean: 
    rm -rf core* *.o *.gch $(ALL) 
+0

투표를 거치려면 이유를 말해주십시오. 나는 텔레파시가 없으며 당신에게 명백한 것이 나에게 없다. –

답변

3

나는 링크 플래그가 잘못된 순서로 믿습니다.

이 나에게 제대로 보이지 않습니다는 ...

LDFLAGS = -lGLEW -lGL -lGLU -lglut -lpthread -lSDL_mixer 

무슨 일이 XYZ를 작성하는 경우 순서에 링커를 검색, 그렇다면, X는 Y와 Z에서 기호를 사용할 수 있다는 것입니다,하지만 Y는 할 수 Z의 기호를 사용하고 Z는 다른 라이브러리의 기호를 사용할 수 없습니다. 모든 "기반"라이브러리는 모든 것이 끝나야합니다.

때때로 라이브러리를 정적 라이브러리인지 동적 라이브러리인지, 사용중인 라이브러리 버전, 라이브러리 컴파일 방법 등에 따라 잘못된 순서로 넣는 작업이 계속 수행 될 수 있습니다. 그것은 내 의견으로는, 주문이 전혀 중요하지 않다는 심각한 오판입니다! . 다윈 (맥 OS, 아이폰 OS) 툴체인 같은 일부 다른 툴체인은 일반적으로

당신의 LIBS 변수는 다음과 같이보고 결국해야 당신이 라이브러리를 지정 어떤 순서 상관 없어 :

LIBS = -lGLEW -lglut -lGLU -lGL -lSDL_mixer -pthread 

하지만 당신은 아마해야 이 같은 메이크 파일에 쓰기 :

LIBS := -lglut $(shell pkg-config --libs gl glu glew SDL_mixer) -pthread 

그리고 빌드 규칙은 다음과 같아야합니다

LDFLAGS := -pg 
mech: ... 
    $(CC) $(LDFLAGS) -o [email protected] $^ $(LIBS) 

몇 가지 사항을 변경했습니다.

  • 도서관은 LDFLAGS에서 LIBS하지으로 이동합니다.

  • $(LIBS)의 라이브러리는 $^ 다음에 오는 명령 줄 끝에 있습니다.

  • $(shell ...)을 여러 번 확장하지 않으려면 :=을 사용하십시오.

  • 대부분의 라이브러리를 올바르게 사용하려면 pkg-config을 사용하십시오. 나는 glut이 pkg-config 파일을 가지고 있다고 생각하지 않는다. (그것은 나의 시스템에는 없다), 그래서 하나는 수동이다. pkg-config --libs 명령을 사용하면 라이브러리를 올바른 순서로 배치하므로 많은 것을 생각할 필요가 없습니다.

  • -lpthreads 대신 -pthread을 사용하십시오 (CFLAGS에도 있음).

이 오류는 메이크 파일에서 다소 일반적인 내용이므로이 모든 것을 설명하는 기사를 게시 할 계획입니다.

관련 문제