【问题标题】:Makefile Lib linking issueMakefile Lib链接问题
【发布时间】:2015-09-23 19:00:49
【问题描述】:

在我的项目中,我有 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) '\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 文件夹中有正确的包含,我在 Libs 文件夹中有 libangelscript.a

【问题讨论】:

  • 对我来说,您似乎没有链接静态库,而是动态库。你可以试试不带 -langelscript 的g++ ... ./Libs/libangelscript.a 吗?

标签: c++ makefile static-libraries


【解决方案1】:

这是一个订单问题

我把我的 LDFLAG 放在文件之前: 我替换这个:$(CC) $(CFLAGS) $(LDFLAGS) $(HFLAGS) -o $(NAME) $^ 通过这个:$(CC) $(CFLAGS) $(HFLAGS) -o $(NAME) $^ $(LDFLAGS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多