На самом деле у меня возникают некоторые проблемы при связывании общей библиотеки OpenGL/freeglut (.so) с проектом C++. Я уверен, что проблема в моем Makefile, поскольку код, который я использую для загрузки (используя функции dlopen/dlsym/dlclose), отлично работает с другими разделяемыми библиотеками. Я думал, что это происходит из-за включений заголовков, но проект OpenGL, с которым я пытаюсь работать, компилируется, когда я создаю его исполняемый файл. Я также проверил 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 $@ $(OBJECTS)
@echo $(TARGET)" compiled !"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp
@$(mkdir) $(OBJDIR)
@$(CC) $(CFLAGS) -c $< -o $@
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
Я надеюсь, что моя проблема понятна и спасибо за чтение.