代码之家  ›  专栏  ›  技术社区  ›  Jeremy Talus

Makefile Lib链接问题

  •  0
  • Jeremy Talus  · 技术社区  · 9 年前

    在我的项目中,我有3个文件夹:

    • 包含lib Header文件的Includes
    • 包含lib文件的库
    • 包含我的项目源文件的源

    但当我试图编译时,我得到了以下错误:

    g++ -W -Wall -Werror -ansi -pedantic -L ./Libs/ -langelscript -I./Includes/ -o Pretorian Sources/math.o Sources/main.o Sources/functions.o 
    Sources/main.o: In function `main':
    main.cpp:(.text+0x10): undefined reference to `asCreateScriptEngine'
    Sources/main.o: In function `ConfigureEngine(asIScriptEngine*)':
    main.cpp:(.text+0x7c): undefined reference to `asGetLibraryOptions'
    collect2: ld returned 1 exit status
    

    这是我的Makefile:

    NAME = Pretorian
    
    SRCDIR = ./Sources/
    HDDIR = ./Includes/
    LIBDIR = ./Libs/
    
    SRCS = $(wildcard $(SRCDIR)*.cpp)
    OBJS = $(SRCS:.cpp=.o)
    
    CC = g++
    
    RM = rm -f
    ECHO = echo -e
    
    CFLAGS += -W -Wall -Werror -ansi -pedantic
    HFLAGS = -I$(HDDIR)
    LDFLAGS = -L $(LIBDIR) -langelscript
    
    all: $(NAME)
    
    %.o: %.cpp
                    $(CC) $(CFLAGS) $(HFLAGS) -o $@ -c $<
    
    $(NAME): $(OBJS)
                            $(CC) $(CFLAGS) $(LDFLAGS) $(HFLAGS) -o $(NAME) $^
                    @$(ECHO) '\033[0;32m> Compiled Without error\033[0m'
    
    clean:
                    $(RM) $(OBJS)
                    @$(ECHO) '\033[0;33m> Directory cleaned\033[0m'
    
    fclean: clean
                    $(RM) $(NAME)
                    @$(ECHO) '\033[0;33m> Remove executable\033[0m'
    
    re: fclean all
    
    SRCList:
            @$(ECHO) $(SRCS)
    
    OBJList:
            @$(ECHO) $(OBJS)
    

    我在Includes文件夹中有正确的include,我有libangelscript。Libs文件夹中的

    1 回复  |  直到 9 年前
        1
  •  0
  •   Jeremy Talus    9 年前

    这是一个订单问题

    我把我的LDFLAG放在文件之前: 我将其替换为: $(CC) $(CFLAGS) $(LDFLAGS) $(HFLAGS) -o $(NAME) $^ 通过以下方式: $(CC) $(CFLAGS) $(HFLAGS) -o $(NAME) $^ $(LDFLAGS)