我正试图将一些SDL2函数封装到我自己的类中。我正在使用C++并使用g++进行编译。
以下是我的错误:
我正在创建一个.so库,其中包含以下Makefile
NAME = arcade_sdl2.so
SRC = sdl2.cpp
encapsulate/encapsulate.cpp
OBJ = $(SRC:.cpp=.o)
CFLAGS = -Wall -Wextra -Werror -fPIC
LIB_SDL2 = -lSDL2 -lSDL2_ttf -lSDL2_image -lSDL2_mixer
$(NAME): $(OBJ)
g++ -c $(CFLAGS) $(SRC) $(LIB_SDL2)
g++ -shared -o $(NAME) $(OBJ)
mv $(NAME) ../../lib/
all: $(NAME)
clean:
rm -f $(OBJ)
fclean: clean
rm -rf ../../lib/$(NAME)
re: fclean all
.PHONY: all clean fclean re
然后,在我的类析构函数中,我需要调用我的成员函数,它们是";MYSDL::SDL_DestoryWindow((";以及";MYSDL::SDL_Quit((";。为此,我简单地从SDL2-lib:返回了相关函数
void MYSDL::sdl_DestroyWindow(SDL_Window *target)
{
SDL_DestroyWindow(target);
}
和
void MYSDL::sdl_Quit(void)
{
SDL_Quit();
}
在编译过程中没有发生错误,因为我的可执行文件";街机;生成。但是当我想执行它以便加载我的";arcade_sdl2.so";lib,我得到了以下错误。
无法打开库:lib/arcade_sdl2.so:未定义符号:SDL_DestoryWindow
有人知道现在该做什么吗?
来自@HolyBlackCat,
我在编译时使用了SDL2的标志,但没有链接。
我需要从转换我的Makefile
$(NAME): $(OBJ)
g++ -c $(CFLAGS) $(SRC) $(LIB_SDL2)
g++ -shared -o $(NAME) $(OBJ)
mv $(NAME) ../../lib/
至
$(NAME): $(OBJ)
g++ -c $(CFLAGS) $(SRC)
g++ -shared -o $(NAME) $(OBJ) $(LIB_SDL2)
mv $(NAME) ../../lib/