0

好的,所以我已经编译了一个我写到库中的简单记录器,这样我就可以将它包含在其他项目中。但是,当我尝试包含该记录器的标头时,编译失败。

这是我的 Makefile 链接库:

CC= clang++
PROG= ./bin/tetris
OBJS= ./src/main.o ./src/Tetris.o ./src/states/BaseState.o ./src/states/MenuState.o \
    ./src/states/GameState.o
LIBS= allegro-5.0 allegro_dialog-5.0 allegro_font-5.0 allegro_ttf-5.0 allegro_color-5.0
CXXFLAGS= -g -Wall -std=c++11
LDFLAGS= $(shell pkg-config --static --libs ${LIBS}) -I./src/util -L./src/util/ -lsimplog

all: $(PROG)

$(PROG): $(OBJS)
    mkdir -p ./bin/
    $(CC) -o $(PROG) $(CXXFLAGS) $(OBJS) $(LDFLAGS)
    rm -f $(OBJS)

clean:
    rm -f $(PROG) $(TEST_PROG) $(OBJS)

该库位于libsimplog.a并且位于src该项目的目录中。我在一个单独的项目文件夹中编译它,然后复制到这里。simplog.h/simplog.c 仅存在于我最初编译此库的项目文件夹中。据我了解,-L ./src/ -lsimplog在我的编译标志中应该链接这个库。但是,我#include "simplog.h"的编译仍然失败:

fatal error: simplog.h: No such file or directory

我在它自己的项目文件夹中编译库,与这个项目分开。simplog.h/simplog.c 存在于该项目中,而不是这个。编译这个库的另一个项目的makefile如下:

CC = clang
CFLAGS = -Wall -c
LIB = libsimplog.a
SOURCE = simplog.c
OBJ = simplog.o

all:
    $(CC) $(CFLAGS) $(SOURCE)
    ar -cvq $(LIB) $(OBJ)

clean:
    rm -f $(LIB)
4

2 回答 2

2

“-L”指定链接器的路径。

您需要告诉预处理器还有另一个包含目录,带有 -I./src/。

CXXFLAGS= -g -Wall -std=c++11 -I./src/ -L./src/ -lsimplog $(shell pkg-config --cflags ${LIBS})
于 2013-10-29T06:43:26.473 回答
0

您是否尝试包含 I Flags 以包含头文件?例如:

    -I/usr/include/

来自 g++ 的手册页

   -I dir           Add the directory dir to the list of directories to 
be searched for header files.  Directories named by -I are searched  
before the standard system include directories. 
If the directory dir is a standard system include directory, 
the option is ignored to ensure that the default search order for
system directories and the special treatment of system headers are no   
defeated .If dir begins with "=", then the "=" will be replaced by the
sysroot prefix; see --sysroot and -isysroot.
于 2013-10-29T06:43:53.993 回答