Не удалось собрать симулятор y86-64 из исходников - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь скомпилировать симулятор для кода Y86-64 в Linux. Я уже переписал make-файл, но получилось, как показано ниже. В нем сказано «неопределенная ссылка для« matherr »». (Похоже, он подключается к gcc, когдасвязывание)

(cd pipe; make all GUIMODE=-DHAS_GUI TKLIBS="-L/usr/lib/ -ltk8.5 -ltcl8.5" TKINC="-I/usr/include/tcl8.5 ")
    make[1]: 进入目录“/home/gongchen/桌面/ICS/archlab-handout/sim/pipe”
    # Building the pipe-std.hcl version of PIPE
    ../misc/hcl2c -n pipe-std.hcl < pipe-std.hcl > pipe-std.c
    gcc -Wall -O2 -I/usr/include/tcl8.5  -I../misc -DHAS_GUI -o psim psim.c pipe-std.c \
        ../misc/isa.c -L/usr/lib/ -ltk8.5 -ltcl8.5 -lm
    /tmp/cchKTZy7.o:(.data.rel+0x0):对‘matherr’未定义的引用
    collect2: error: ld returned 1 exit status
    Makefile:42: recipe for target 'psim' failed
    make[1]: *** [psim] Error 1
    make[1]: 离开目录“/home/gongchen/桌面/ICS/archlab-handout/sim/pipe”
    Makefile:28: recipe for target 'all' failed
    make: *** [all] Error 2

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Мои одноклассники могут решить эту проблему: прокомментируйте код, относящийся к matherr, например, код на картинке.И режим GUI работает.好 厉害!enter image description here

0 голосов
/ 20 октября 2018
gcc -Wall -O2 -I/usr/include/tcl8.5  -I../misc -DHAS_GUI -o psim psim.c pipe-std.c \
    ../misc/isa.c -L/usr/lib/ -ltk8.5 -ltcl8.5 -lm
/tmp/cchKTZy7.o:(.data.rel+0x0):对‘matherr’未定义的引用

Вы связываете и получаете неопределенную ошибку ссылки на matherr.

Похоже, matherr является частью математической библиотеки SVID.Согласно справочной странице matherr(3) этот символ больше не присутствует в Glibc версии 2.27 и выше.

ОПИСАНИЕ

Примечание: механизм, описанный на этой странице, больше не поддерживается glibc.До glibc 2.27 он был помечен как устаревший.Начиная с glibc 2.27, механизм был полностью удален.Новые приложения должны использовать методы, описанные в math_error (7) и fenv (3).На этой странице описан механизм matherr () для поддержки и портирования старых приложений.

Справочная страница math_error(7) говорит, что для проверки на наличие ошибок необходимо сделать следующее:

  1. установить errno в ноль
  2. call feclearexcept(FE_ALL_EXCEPT);

После того, как математический расчет завершится, вы должны проверить следующее для ненулевогозначение, указывающее на ошибку:

  1. errno
  2. fetestexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW);

Так как вы парень или девушка пытаетесь использовать программу (а несопровождающий) Я предлагаю два курса действий.Стратегия состоит в том, чтобы использовать дистрибутив, где все работает, и добавить его к сопровождающему Y86, чтобы исправить это.

Сначала используйте другой, более старый дистрибутив, который предоставляет Glibc 2.26 или более раннюю версию.Что-то вроде Debian 8 (Glibc 2.19) или Fedora 25 (Glibc 2.24) должно работать нормально.

Во-вторых, подайте отчет об ошибке в проекте Y86.Сопровождающие Y86 должны решить проблему, а не студенты, пытающиеся выучить материал класса.

...