Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法链接到BFD_C_Linker_Static Linking_Dynamic Linking_Pkg Config - Fatal编程技术网

C 无法链接到BFD

C 无法链接到BFD,c,linker,static-linking,dynamic-linking,pkg-config,C,Linker,Static Linking,Dynamic Linking,Pkg Config,我正在尝试将此文件包括在我的项目中: 但它需要针对BFD的链接。我安装了binutils和binutils-devel。我尝试过与-lbfd链接,也尝试过直接链接到/usr/lib64/libbfd.so和/usr/lib64/libbfd.a(两者都存在)。我还尝试搜索pkg config以查看是否应该使用不同的标志,但是pkg config中没有对BFD或binutils的引用 无论我尝试了什么,都会出现以下错误: undefined reference to 'bfd_init' unde

我正在尝试将此文件包括在我的项目中:

但它需要针对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)
我真的不知道我需要做什么才能让这个链接正确了。我有什么遗漏吗?

更改:

$(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)
必须使用编译命令将对象文件放在库之前。请参阅。

更改:

$(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)

必须使用编译命令将对象文件放在库之前。请参阅。

您的标题有点误导;您不能链接到
.h
文件。请更新您的问题以显示您正在尝试的确切命令;命令行参数的顺序可能很关键。使用my Makefiles和使用说明更新。您的标题有点误导;您不能链接到
.h
文件。请更新您的问题以显示您正在尝试的确切命令;命令行参数的顺序可能很关键。使用我的makefile和使用说明更新。谢谢!这就是问题所在!现在一切似乎都正常了。谢谢!这就是问题所在!现在一切似乎都在运转。