This question already has answers here:
Closed 5 years ago.
Trying to include a library, but keep getting 'undefined reference to' messages
(3个答案)
我正试图将此文件包含在我的项目中:http://cairo.sourcearchive.com/documentation/1.9.4/backtrace-symbols_8c-source.html
但它需要与BFD连接。我已经安装了
无论我尝试了什么,都会出现以下错误:
首先,我正在编译我的日志和我链接到上面的
然后我将此对象文件链接到我的主项目中:
我真的不知道我需要做什么才能让这个链接正常。我有什么遗漏吗?
对此:
必须使用编译命令将对象文件放在库之前。见this question。
(3个答案)
我正试图将此文件包含在我的项目中: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
以查看是否应该使用不同的标志,但在binutils
中没有引用BFD或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)
我真的不知道我需要做什么才能让这个链接正常。我有什么遗漏吗?
最佳答案
更改:
$(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。
关于c - 无法链接到BFD ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20915623/
10-11 21:53