Makefile Lib 链接问题
Makefile Lib linking issue
在我的项目中,我有 3 个文件夹:
- 包含哪些包含lib头文件
- 包含 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) '3[0;32m> Compiled Without error3[0m'
clean:
$(RM) $(OBJS)
@$(ECHO) '3[0;33m> Directory cleaned3[0m'
fclean: clean
$(RM) $(NAME)
@$(ECHO) '3[0;33m> Remove executable3[0m'
re: fclean all
SRCList:
@$(ECHO) $(SRCS)
OBJList:
@$(ECHO) $(OBJS)
我在 Includes 文件夹中有正确的包含,我在 Libs 文件夹中有 libangelscript.a
这是顺序问题
我将我的 LDFLAG 放在文件之前:
我替换这个:$(CC) $(CFLAGS) $(LDFLAGS) $(HFLAGS) -o $(NAME) $^
通过这个:$(CC) $(CFLAGS) $(HFLAGS) -o $(NAME) $^ $(LDFLAGS)
在我的项目中,我有 3 个文件夹:
- 包含哪些包含lib头文件
- 包含 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) '3[0;32m> Compiled Without error3[0m'
clean:
$(RM) $(OBJS)
@$(ECHO) '3[0;33m> Directory cleaned3[0m'
fclean: clean
$(RM) $(NAME)
@$(ECHO) '3[0;33m> Remove executable3[0m'
re: fclean all
SRCList:
@$(ECHO) $(SRCS)
OBJList:
@$(ECHO) $(OBJS)
我在 Includes 文件夹中有正确的包含,我在 Libs 文件夹中有 libangelscript.a
这是顺序问题
我将我的 LDFLAG 放在文件之前:
我替换这个:$(CC) $(CFLAGS) $(LDFLAGS) $(HFLAGS) -o $(NAME) $^
通过这个:$(CC) $(CFLAGS) $(HFLAGS) -o $(NAME) $^ $(LDFLAGS)