2014-01-04 2 views
1

Я пытаюсь включить этот файл в моем проекте: http://cairo.sourcearchive.com/documentation/1.9.4/backtrace-symbols_8c-source.htmlНе удалось установить связь с BFD

Но это требует увязки с BFD. У меня установлены как binutils, так и binutils-devel. Я попытался связать с -lbfd, а также напрямую с /usr/lib64/libbfd.so и /usr/lib64/libbfd.a (которые оба существуют). Я также попытался найти pkg-config, чтобы увидеть, есть ли другой флаг, который я должен использовать, но нет ссылки на BFD или binutils в pkg-config.

Независимо от того, что я пытался, я получаю следующие ошибки:

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) 

Я действительно не знаю, что мне нужно чтобы сделать это правильно. Есть что-то, что мне не хватает?

+0

Ваше название немного вводит в заблуждение; вы не связываетесь с файлом '.h'. Обновите свой вопрос, чтобы показать точную команду, которую вы пытаетесь; порядок аргументов командной строки может быть критическим. –

+0

Обновлено с помощью Makefile и объяснения использования. – PseudoPsyche

ответ

3

Изменение:

$(PROG): $(OBJS) 
    mkdir -p ./bin/ 
    $(CC) -g -rdynamic -o $(PROG) $(LDFLAGS) -lbfd -liberty $(OBJS) 
    rm -f $(OBJS) 

Для этого:

$(PROG): $(OBJS) 
    mkdir -p ./bin/ 
    $(CC) -g -rdynamic -o $(PROG) $(LDFLAGS) $(OBJS) -lbfd -liberty 
    rm -f $(OBJS) 

Объектные файлы должны быть помещены перед библиотеками с командой компиляции. См. this question.

+0

Спасибо! Это была проблема! Кажется, в настоящее время все работает. – PseudoPsyche

 Смежные вопросы

  • Нет связанных вопросов^_^