2015-01-01 2 views
3

Я пытаюсь запустить dfhack в отладчике. Я использую 64-битный Ubuntu Trusty, но у Dwarf Fortress нет 64-битной сборки, поэтому я запускаю 32-битную Крепость Гномов. Я установил gdb через apt-get install gdb:i386.«неправильный ELF-класс: ELFCLASS32», но только при использовании GDB

Вот что происходит, когда я начинаю dfhack с GDB:

[email protected]:~/df_linux$ xvfb-run -a ./dfhack --gdb 
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 
Copyright (C) 2014 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i686-linux-gnu". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word"... 
Reading symbols from ./libs/Dwarf_Fortress...(no debugging symbols found)...done. 
(gdb) start 
Temporary breakpoint 1 at 0x804bdec 
Starting program: /home/ben/df_linux/libs/Dwarf_Fortress 
ERROR: ld.so: object './hack/libdfhack.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored. 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1". 

Temporary breakpoint 1, 0xf7598b53 in main() 
    from /home/ben/df_linux/libs/libgraphics.so 
(gdb) 

Вот что происходит, когда я запускаю его без GDB:

[email protected]:~/df_linux$ xvfb-run -a ./dfhack 
Xlib: extension "RANDR" missing on display ":99". 
Loading bindings from data/init/interface.txt 
New window size: 1280x720 
Font size: 10x12 
Resizing grid to 128x60 
Resizing font to 10x12 

Resetting textures 
DFHack is ready. Have a nice day! 
Type in '?' or 'help' for general help, 'ls' to see all commands. 
[DFHack]# 

Исполняемый, предварительно загруженного библиотеки, и GDB являются все 32 -битовый:

[email protected]:~/df_linux$ readelf -h /home/ben/df_linux/libs/Dwarf_Fortress 
ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - System V 
    ABI Version:      0 
    Type:        EXEC (Executable file) 
    Machine:       Intel 80386 
    Version:       0x1 
    Entry point address:    0x804c980 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   18192664 (bytes into file) 
    Flags:        0x0 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   8 
    Size of section headers:   40 (bytes) 
    Number of section headers:   28 
    Section header string table index: 27 
[email protected]:~/df_linux$ readelf -h /home/ben/df_linux/hack/libdfhack.so 
ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - GNU 
    ABI Version:      0 
    Type:        DYN (Shared object file) 
    Machine:       Intel 80386 
    Version:       0x1 
    Entry point address:    0x1b7e40 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   43686636 (bytes into file) 
    Flags:        0x0 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   7 
    Size of section headers:   40 (bytes) 
    Number of section headers:   37 
    Section header string table index: 34 
[email protected]:~/df_linux$ readelf -h /usr/bin/gdb 
ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - System V 
    ABI Version:      0 
    Type:        EXEC (Executable file) 
    Machine:       Intel 80386 
    Version:       0x1 
    Entry point address:    0x808cb95 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   5089368 (bytes into file) 
    Flags:        0x0 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   9 
    Size of section headers:   40 (bytes) 
    Number of section headers:   28 
    Section header string table index: 27 
+0

Поле 'OS/ABI' отличается. Это имеет значение? –

ответ

1

ERROR: ld.so: object './hack/libdfhack.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.

Эта ошибка возникает из GDB, запускающего вашу (64-разрядную) оболочку, которая, в свою очередь, запускает вашу (32-разрядную) программу dfhack.

Вы должны заботиться только о предварительной загрузке в целевую программу. Тот факт, что libdfhack.so не был предварительно загружен в вашу оболочку, равен без последствий, и вы должны просто проигнорировать его.

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