Я пытаюсь включить этот файл в свой проект: http://cairo.sourcearchive.com/documentation/1.9.4/backtrace-symbols_8c-source.html
Но для этого требуется привязка к BFD. У меня установлены и binutils
, и binutils-devel
. Я пробовал связываться с -lbfd
, а также напрямую с /usr/lib64/libbfd.so
и /usr/lib64/libbfd.a
(оба существуют). Я также попытался найти pkg-config
, чтобы увидеть, есть ли другой флаг, который я должен использовать, но в pkg-config
нет ссылки на BFD или binutils
.
Независимо от того, что я пробовал, я получаю следующие ошибки:
undefined reference to 'bfd_init'
undefined reference to 'bfd_openr'
undefined reference to 'bfd_check_format'
undefined reference to 'bfd_checkformat_matches'
undefined reference to 'bfd_close'
undefined reference to 'bfd_map_over_sections'
Сначала я компилирую свой регистратор и файл backtrace-symbols.c
, на который я ссылался выше (поскольку регистратор — это то место, где я намереваюсь использовать его для печати трассировок). Затем я связываю эти два объектных файла вместе в комбинированный объектный файл:
CC = clang
CFLAGS = -g -Wall -c
SOURCE = simplog.c
OBJ = simplog.o, simplog-temp.o, backtrace-symbols.o
all:
$(CC) $(CFLAGS) $(SOURCE); mv simplog.o simplog-temp.o; \
$(CC) -ansi $(CFLAGS) backtrace-symbols.c; \
ld -r simplog-temp.o backtrace-symbols.o -o simplog.o
clean:
rm -f $(OBJ)
Затем я связываю этот объектный файл со своим основным проектом:
CC= clang++
PROG= ./bin/chiplus8
OBJS= ./src/main.o ./src/Chip8.o ./src/EmuCPU.o ./src/SimpleLogger/simplog.o
LIBS=
CXXFLAGS= -g -Wall -std=c++11 $(shell pkg-config --cflags ${LIBS})
LDFLAGS= $(shell pkg-config --static --libs ${LIBS})
all: logger $(PROG)
$(PROG): $(OBJS)
mkdir -p ./bin/
$(CC) -g -rdynamic -o $(PROG) $(LDFLAGS) -lbfd -liberty $(OBJS)
rm -f $(OBJS)
logger:
cd ./src/SimpleLogger; make clean all
clean:
rm -f $(PROG) $(OBJS)
Я действительно не уверен, что мне нужно сделать, чтобы это правильно связывалось. Есть что-то, что мне не хватает?
.h
. Обновите свой вопрос, чтобы указать точную команду, которую вы пытаетесь выполнить; порядок аргументов командной строки может быть критическим. - person Keith Thompson   schedule 04.01.2014