2017-12-14 10 views
0

우분투 16.04 머신에서 GDB (버전 8.0)를 빌드하려고합니다. 팔 머신 (현재 서버가없는)에서 직접 디버깅 할 계획입니다.암을위한 GDB를 빌드하는 중 오류가 발생했습니다.

이 (가 here 설명 된대로) 나는 연결하는 동안

./configure --target=arm-linux-gnueabi --host=arm-linux-gnueabi --build=x86_64_unknown-linux-gnu 
make 

이 지침을 실행 한 시스템이 나에게이 오류 던졌다 : 나는 새의 readline 라이브러리를 다운로드하는 것을 시도했다

g++ -std=gnu++11 -g -O2 -static-libstdc++ -static-libgcc \ 
    -o gdb gdb.o arm.o arm-linux.o arm-get-next-pcs.o arm-tdep.o arm-linux-tdep.o glibc-tdep.o solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o ser-base.o ser-unix.o ser-pipe.o ser-tcp.o inf-ptrace.o fork-child.o arm-linux-nat.o aarch32-linux-nat.o proc-service.o linux-thread-db.o linux-nat.o linux-osdata.o linux-fork.o linux-procfs.o linux-ptrace.o linux-waitpid.o linux-personality.o linux-namespaces.o ax-gdb.o ax-general.o ctf.o dcache.o remote.o remote-fileio.o remote-notif.o tracefile.o tracefile-tfile.o tracepoint.o cli-cmds.o cli-decode.o cli-dump.o cli-interp.o cli-logging.o cli-script.o cli-setshow.o cli-utils.o mi-cmd-break.o mi-cmd-catch.o mi-cmd-disas.o mi-cmd-env.o mi-cmd-file.o mi-cmd-info.o mi-cmd-stack.o mi-cmd-target.o mi-cmd-var.o mi-cmds.o mi-console.o mi-getopt.o mi-interp.o mi-main.o mi-out.o mi-parse.o mi-symbol-cmds.o stub-termcap.o python.o guile.o elfread.o stap-probe.o dtrace-probe.o posix-hdep.o posix-strerror.o ada-exp.o c-exp.o cp-name-parser.o d-exp.o f-exp.o go-exp.o m2-exp.o p-exp.o rust-exp.o ada-lang.o ada-tasks.o ada-typeprint.o ada-valprint.o ada-varobj.o addrmap.o agent.o annotate.o arch-utils.o auto-load.o auxv.o bcache.o bfd-target.o block.o blockframe.o break-catch-sig.o break-catch-syscall.o break-catch-throw.o breakpoint.o btrace.o btrace-common.o buffer.o build-id.o buildsym.o c-lang.o c-typeprint.o c-valprint.o c-varobj.o charset.o cleanups.o cli-out.o coff-pe-read.o coffread.o common-agent.o common-debug.o common-exceptions.o common-regcache.o common-utils.o complaints.o completer.o continuations.o copying.o corefile.o corelow.o cp-abi.o cp-namespace.o cp-support.o cp-valprint.o d-lang.o d-namespace.o d-valprint.o dbxread.o debug.o demangle.o dfp.o dictionary.o disasm.o disasm-selftests.o doublest.o dummy-frame.o dwarf2-frame.o dwarf2-frame-tailcall.o dwarf2expr.o dwarf2loc.o dwarf2read.o environ.o errors.o eval.o event-loop.o event-top.o exceptions.o exec.o expprint.o extension.o f-lang.o f-typeprint.o f-valprint.o fileio.o filestuff.o filesystem.o findcmd.o findvar.o format.o frame.o frame-base.o frame-unwind.o gcore.o gdb_bfd.o gdb-dlfcn.o gdb_obstack.o gdb_usleep.o gdb_vecs.o gdbarch.o gdbtypes.o gnu-v2-abi.o gnu-v3-abi.o go-lang.o go-typeprint.o go-valprint.o inf-child.o inf-loop.o infcall.o infcmd.o inferior.o infrun.o inline-frame.o interps.o jit.o language.o linespec.o location.o m2-lang.o m2-typeprint.o m2-valprint.o macrocmd.o macroexp.o macroscope.o macrotab.o main.o maint.o mdebugread.o mem-break.o memattr.o memory-map.o memrange.o mi-common.o minidebug.o minsyms.o mipsread.o namespace.o new-op.o objc-lang.o objfiles.o observer.o opencl-lang.o osabi.o osdata.o p-lang.o p-typeprint.o p-valprint.o parse.o print-utils.o printcmd.o probe.o progspace.o prologue-value.o psymtab.o ptid.o record.o record-btrace.o record-full.o regcache.o reggroups.o registry.o reverse.o rsp-low.o run-time-clock.o rust-lang.o selftest.o selftest-arch.o sentinel-frame.o ser-event.o serial.o signals.o signals-state-save-restore.o skip.o solib.o solib-target.o source.o stabsread.o stack.o std-regs.o symfile.o symfile-debug.o symmisc.o symtab.o target.o target-dcache.o target-descriptions.o target-memory.o thread.o thread-fsm.o tid-parse.o top.o trad-frame.o tramp-frame.o typeprint.o ui-file.o ui-out.o user-regs.o utils.o utils-selftests.o valarith.o valops.o valprint.o value.o varobj.o vec.o version.o waitstatus.o xml-builtin.o xml-support.o xml-syscall.o xml-tdesc.o xml-utils.o compile.o compile-c-support.o compile-c-symbols.o compile-c-types.o compile-loc2c.o compile-object-load.o compile-object-run.o inflow.o init.o \ 
     ../readline/libreadline.a ../opcodes/libopcodes.a ../bfd/libbfd.a -L./../zlib -lz ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a -ldl -ldl -lm -ldl  ../libiberty/libiberty.a build-gnulib/import/libgnu.a -ldl -Wl,--dynamic-list=./proc-service.list 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
/usr/bin/ld: ../readline/libreadline.a(readline.o): Relocations in generic ELF (EM: 40) 
../readline/libreadline.a: error adding symbols: File in wrong format 
collect2: error: ld returned 1 exit status 
Makefile:2215: recipe for target 'gdb' failed 
make[2]: *** [gdb] Error 1 
make[2]: Leaving directory '/home/user/gdb-8.0/gdb' 
Makefile:9126: recipe for target 'all-gdb' failed 
make[1]: *** [all-gdb] Error 2 
make[1]: Leaving directory '/home/user/gdb-8.0' 
Makefile:849: recipe for target 'all' failed 
make: *** [all] Error 2 

및 gdb와 함께 제공되는 것으로 교체하십시오. 그러나 문제가 해결되지 않았습니다.

아무도 단서가 있습니까?

감사합니다.

+0

틀렸어. /usr/bin/ld가 아님, arm-XXX-ld이어야합니다. –

+0

어떻게 변경할 수 있습니까? – sborpo

+0

./ configure --target = arm-linux-gnueabi --host = arm-linux-gnueabi --build = x86_64_unknown-linux-gnu LD = arm-XXX-ld CC = arm-XXX-gcc CXX = arm-XXX-g ++ –

답변

0

귀하의 명령이 올바른 보인다. 예상대로 작동하지 않는 이유는 $PATH에서 ARM 크로스 컴파일 도구 체인을 사용할 수 없거나 그 접두사가 arm-linux-gnueabi이 아니기 때문입니다. 예를 들어으로

gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz 툴체인을 다운로드 ~/tmp 아래에 압축을 푼 것으로 가정합니다. 다음 명령은 성공적으로 gdb를 구축해야합니다

PATH="$PATH:$HOME/tmp/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin" 
./configure --host=arm-linux-gnueabi 
make 

나는 ./configure 호출을 단축 기본값 (TARGET=HOSTBUILD=<automatically guessed>)을 충분하기 때문이다.

여기 혼란ld들이 가정 사용은 그들에게 gcc를 찾을 수 없습니다 --host=...이 경우 configure 스크립트 arm-linux-gnueabi-gcc에 대한보기 (...-ld 등), 하지만하게한다는 사실에서 유래 교차 컴파일 주최하다. 이 대체 행동은 여기서 일어난 일입니다.

는 올바른 툴 체인이 사용되어 있는지 확인 configure의 출력

checking for arm-linux-gnueabi-gcc... found arm-linux-gnueabi-gcc 

라인을 감시합니다. 다른 사람이 제안으로 LD=arm-XXX-ld CC=arm-XXX-gcc CXX=arm-XXX-g++를 지정하지

--host= 옵션의 요점은 당신이 당신의 $PATH에 넣어 필요가, 당신을 위해이 일을 찾는 것입니다.

0

./configure --target=arm-linux-gnueabi ...

x86 시스템에 ARM 바이너리를 빌드하려고합니다. ARM을 목표로 크로스 컴파일러이 필요하지만, 네이티브 컴파일러 (x86 오브젝트를 생성)를 사용하는 것으로 보입니다. 페이 한 말했듯이

, 당신이 필요합니다

./configure ... LD=/path/to/arm-XXX-ld CC=/path/to/arm-XXX-gcc CXX=/path/to/arm-XXX-g++ 
+0

불행히도 작동하지 않았습니다. ( – sborpo

+0

@sborpo * 무엇이 작동하지 않았습니까? 정확한 내용 * 당신이 한 일의 세부 사항과 그 오류의 내용이 없으면 유용한 도움을받을 가능성이 희박합니다 .. –

+0

안녕하세요, xaizek 님의 답변이 저에게 효과적이었습니다 :) – sborpo

관련 문제