使用SDL2创建共享对象时未定义的符号



我正试图将一些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/

最新更新