Как включить заголовок из самостоятельно скомпилированной библиотеки?

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

Я собираю библиотеку в своей собственной папке проекта, отдельно от этого проекта. simpleog.h/simplog.c существуют в этом проекте, а не в этом. Файл make для другого проекта, который компилирует эту библиотеку, выглядит следующим образом:

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)
Теги:
makefile
static-libraries
include

2 ответа

2
Лучший ответ

"-L" указывает путь библиотеки для компоновщика.

Вы должны сообщить препроцессору, что есть другой каталог include с -I./src/.

CXXFLAGS= -g -Wall -std=c++11 -I./src/ -L./src/ -lsimplog $(shell pkg-config --cflags ${LIBS})
  • 0
    Попробовал это, но все равно не удалось скомпилировать с той же ошибкой.
  • 0
    Итак, по отношению к Makefile тетриса, simplog.h находится в "./src"?
Показать ещё 12 комментариев
0

Вы пытались включить я 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню