2017-03-31 2 views
0

OpenGL/freeglut 공유 라이브러리 (.so)를 C++ 프로젝트에 연결하는 동안 실제로 몇 가지 문제가 있습니다. dlopen/dlsym/dlclose 함수를 사용하여로드하는 데 사용하는 코드가 다른 공유 라이브러리와 잘 작동하기 때문에 문제가 내 Makefile에 있다고 확신합니다. 헤더 흠도하지만 OpenGL 프로젝트에서 실행 파일을 만들 때 컴파일 작업을 시도하고 있다고 생각했습니다. 나는 또한 glut FAQ를 체크했으나 해결책은 이제 죽은 링크로 리다이렉트한다. 그래서 내 Makefile 컨텐트가있다. 내가 잘못 본 사람이 있는가?자유 라이브러리가있는 공유 라이브러리 - 정의되지 않은 심볼

TARGET = lib_opengl.so 
CC  = g++ 

SRC  = GL_Handler.cpp  \ 
      GL_Utils.cpp 

DEVIL_CFLAGS := $(shell pkg-config --cflags IL) 
DEVIL_LIBS  := $(shell pkg-config --libs IL) 

LIBS += -lGL -lGLU -lglut $(DEVIL_CFLAGS) $(DEVIL_LIBS) 

CFLAGS = -W -Werror -Wall -ansi -pedantic -fPIC -shared -L/usr/X11R6/lib/ $(LIBS) 

SRCDIR = src 
OBJDIR = obj 

SOURCES := $(addprefix src/, $(SRC)) 

OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) 

rm  = rm -rf 
mkdir = mkdir -p 

$(TARGET): $(OBJECTS) 
     @$(CC) $(CFLAGS) -o [email protected] $(OBJECTS) 
     @echo $(TARGET)" compiled !" 

$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp 
     @$(mkdir) $(OBJDIR) 
     @$(CC) $(CFLAGS) -c $< -o [email protected] 

all  : $(TARGET) 

clean : 
     @$(rm) $(OBJDIR) 
     @echo "Binary files deleted" 

fclean : clean 
     @$(rm) $(TARGET) $(LINK) 
     @echo "Binary and executable files are deleted" 

re  : fclean all 

.PHONY: all clean fclean re 

내가 공유 라이브러리 로더와 링크하려고 할 때 결과가 있습니다.

./so_loader ./lib/lib_opengl.so 
./so_loader: symbol lookup error: ./lib/lib_opengl.so: undefined symbol: glutInit 

나는 내 문제가 이해할 만하고 독서에 감사 드리기를 바랍니다.

답변

0

처음에는 컴파일을위한 CFLAGS 대신 링크 용 변수 LDFLAGS를 사용하십시오. 다음과 같은 내용이 있습니다.

LDFLAGS = -L/usr/X11R6/lib 
... 
$(TARGET): LDFLAGS += -shared -Wl,--no-undefined 
$(TARGET): $(OBJECTS) 
     @$(CC) $(LDFLAGS) -o [email protected] $(OBJECTS) ${LIBS} 
+0

정확하지 않습니다. 모든 것은 이제 잘 작동합니다. 감사합니다! –

관련 문제