Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2010, 16:23   #1
slowflake
 
Регистрация: 05.06.2010
Сообщений: 3
По умолчанию Не компилируются тесты NIST

Уважаемые участники форума, постараюсь подробно изложить свою проблему. Для людей, разбирающихся в теме помощь составит 5 минут, а я буду очень благодарен.
Я занимаюсь разработкой поточного шифра и для тестирования вырабатываемых им псевдослучайных последовательностей, мне необходимо использовать тесты, разработанные Национальным институтом стандартов и технологий (NIST).
Тесты написаны на языке ANSI C.
В архиве лежат 6 папок data/, experiments/, include/, obj/, src/ , templates/. и один файл makefile. Этот файл представлен ниже.
Необходимо его выполнить, тогда исполняемый файл assess должен появиться в дирректории.
В подробном описании программы (в секции 5) говориться о необходимости исправить 1-ю и 3-ю строчку файла, указав там свой компилятор и корневую папку соответственно.
У меня установлен windows Seven.
Я скачал компилятор gcc для windows и постарался сделать все как указано в инструкции:
Сохранил папку STS c разархивированными файлами в корень диска C:
Папку с компилятором поместил в STS. Однако не уверен, что верно прописывал путь (пытался разными способами)
Переименовал файл в makefile.exe и постарался его запустить
Появилось сообщение о следующей ошибке:
he NTVDM CPU has encountered an illegal instruction
CS:058c IP:017b OP:63 6c 75 64 65 Choose 'Close' to terminate the application

Пытался изменять путь пребирая различные варианты (указывал путь начиная с $(ROOTDIR), с C:\ , менял / на \) - ничего не помогло.

Потом установил себе виртуальную машину и поставил на нее Ubuntu.
Так же пытался запустить этот файл через терминал, после каждой строчки отображалась ошибка.

Посоветуйте пожалуйста, какой лучше использовать компилятор, в какой OS лучше компилировать, и как тогда изменить файл "makefile"

У меня также установлена Visual Studio 2008. Возможно ли как то скомпилировать через нее?

Буду очень благодарен за помощь

файл "makefile" (конец пришлось обрезать из-за того что сообщение оказалось больше 5000 знаков) :
CC = /usr/bin/gcc
GCCFLAGS = -c -Wall
ROOTDIR = .
SRCDIR = $(ROOTDIR)/src
OBJDIR = $(ROOTDIR)/obj
VPATH = src:obj:include

OBJ = $(OBJDIR)/assess.o $(OBJDIR)/frequency.o $(OBJDIR)/blockFrequency.o \
$(OBJDIR)/cusum.o $(OBJDIR)/runs.o $(OBJDIR)/longestRunOfOnes.o \
$(OBJDIR)/serial.o $(OBJDIR)/rank.o $(OBJDIR)/discreteFourierTransform.o \
$(OBJDIR)/nonOverlappingTemplateMatchings.o \
$(OBJDIR)/overlappingTemplateMatchings.o $(OBJDIR)/universal.o \
$(OBJDIR)/approximateEntropy.o $(OBJDIR)/randomExcursions.o \
$(OBJDIR)/randomExcursionsVariant.o $(OBJDIR)/linearComplexity.o \
$(OBJDIR)/dfft.o $(OBJDIR)/cephes.o $(OBJDIR)/matrix.o \
$(OBJDIR)/utilities.o $(OBJDIR)/generators.o $(OBJDIR)/genutils.o

assess: $(OBJ)
$(CC) -o $@ $(OBJ) -lm

$(OBJDIR)/assess.o: $(SRCDIR)/assess.c defs.h decls.h utilities.h
$(CC) -o $@ -c $(SRCDIR)/assess.c

$(OBJDIR)/frequency.o: $(SRCDIR)/frequency.c defs.h externs.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/frequency.c

$(OBJDIR)/blockFrequency.o: $(SRCDIR)/blockFrequency.c defs.h externs.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/blockFrequency.c

$(OBJDIR)/cusum.o: $(SRCDIR)/cusum.c defs.h externs.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/cusum.c

$(OBJDIR)/runs.o: $(SRCDIR)/runs.c defs.h externs.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/runs.c

$(OBJDIR)/longestRunOfOnes.o: $(SRCDIR)/longestRunOfOnes.c defs.h externs.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/longestRunOfOnes.c

$(OBJDIR)/rank.o: $(SRCDIR)/rank.c defs.h externs.h matrix.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/rank.c

$(OBJDIR)/discreteFourierTransform.o: $(SRCDIR)/discreteFourierTransform.c \
defs.h externs.h utilities.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/discreteFourierTransform.c

$(OBJDIR)/nonOverlappingTemplateMatchings.o: \
$(SRCDIR)/nonOverlappingTemplateMatchings.c defs.h externs.h utilities.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/nonOverlappingTemplateMatchings.c

$(OBJDIR)/overlappingTemplateMatchings.o: \
$(SRCDIR)/overlappingTemplateMatchings.c defs.h externs.h utilities.h
$(CC) -o $@ $(GCCFLAGS) $(SRCDIR)/overlappingTemplateMatchings.c


clean:
rm -f assess $(OBJDIR)/*.o

rebuild: clean assess
slowflake вне форума Ответить с цитированием
Старый 05.06.2010, 16:26   #2
slowflake
 
Регистрация: 05.06.2010
Сообщений: 3
По умолчанию

Прошу прощения за дублирование тем. Выход в интернет через очень плохое соединение. Думал, что темы не создавались. Просьба модераторам убрать дубликаты.
slowflake вне форума Ответить с цитированием
Старый 05.06.2010, 18:30   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Переименовал файл в makefile.exe и постарался его запустить
Что за идиотизм? А давайте я текстовой файл переименование превращу в исполняемый.

Цитата:
в какой OS лучше компилировать
В любой поддерживаемой исходниками.

Цитата:
и как тогда изменить файл "makefile"
Вы же сами писали: Как минимум поменять путь к компилятору.
Цитата:
CC = /usr/bin/gcc
makefile - текстовой файл для программ типа make (nmake). Запускаете командную строку, устанавливаете путь к компилятору в перемменую PATH (если там его уже нет), переходите в папку с makefile и командуете make (nmake)
p51x вне форума Ответить с цитированием
Старый 05.06.2010, 23:07   #4
slowflake
 
Регистрация: 05.06.2010
Сообщений: 3
По умолчанию

Большое спасибо! Даже стыдно, что такой бред написал.
Сейчас вроде все настроил, но все равно не компилируется.
Появляется сообщение make: commands defined twice for target c near line 27
slowflake вне форума Ответить с цитированием
Старый 09.09.2010, 20:40   #5
advancer
Новичок
Джуниор
 
Регистрация: 09.09.2010
Сообщений: 2
По умолчанию

У меня такая же проблема! Может кто-нибудь объяснить, как это скомпилировать с помощью Visual Studio 2010 ?
Большое спасибо.
Вот что прочитал в
Мануале: (section 5.3) одно из свойств системы это "Platform Independence: The source code was written in ANSI C. However, some modification may have to be made, depending on the target platform and the compiler."

и

"Portability:With minor modifications, source code may be ported to different platforms. The
NIST source code was ported to a Windows XP system running Visual Studio 2005 compiler and
a Ubuntu Linux system running gcc."
advancer вне форума Ответить с цитированием
Старый 10.09.2010, 10:39   #6
youri-pal
Новичок
Джуниор
 
Регистрация: 10.09.2010
Сообщений: 1
По умолчанию

А вот я имел несчастье скомпилировать тесты NIST по Visual Studio 2008, и поковыряться в исходниках. Вывод однозначный - они не пригодны для тестирования последовательностей случайных чисел. Вы хоть смотрели, для чего они нужны? Для тестирования битовых последовательностей. А последовательности чисел ими не протестируешь.
Последовательность чисел и последовательность битов - это разные вещи.

Делаем мысленный эксперимент: Берем игральную кость. Т.е. обыкновенный кубик, на гранях которого написано 0, 1, 2, 3, 4, 5.
В наших руках настоящий генератор случайных чисел. (Кто то сомневается?)

Составляем последовательность чисел, выпавших при бросании кубика. Обозначим её как A, A[k] - это k-тое число этой последовательности.
Последовательность имеет линейное равномерное распределение. Вероятность для каждого числа одинаковая - 1/6.

Теперь попробует сделать то, что делают тесты NIST. А именно: выдрать биты из каждого числа последовательности, и составить из них битовую последовательность.
B0[k] - это нулевой бит числа, B1[k] - первый, B2[k] - второй.
B0 и B1 ведут себя сходным образом, т.е. это случайные значения 0 и 1, равномерно распреленные, с вероятностью 1/2. А вот B2 ведет себя по-другому. Это тоже случайные значения 0 и 1, но распределение будет не равномерным. Догадаться совсем не трудно. B2 принимает нулевое значение в четырех числах 0,1,2,3. А единичное значение только в двух 4,5. Поэтому вероятность 0 для B2 будет 2/3, а 1 - 1/3.

Уже интересно. Была одна последовательность с равномерным распределением, стало три, одна из которых заведомо имеет кривое распределение, а остальные, хоть и имеют равномерное распределение, но оно также отличается от распределения исходной последовательности.

Продолжаем. Сливаем три последовательности в одну.
B[k] = B0[k],B1[k], B2[k]. Получиться тоже перекошенное распределение.
Вероятность 0 = 11/18, вероятность 1 = 7/18.

И вот для этой B расчитываются какие то статистические величины.
Они кому нужны, если нужно было проверить характистики A ?
Истинных характеристик последовательности A мы не узнаем никогда, потому что тесты NIST обчитывают не последовательность чисел A, а битовую последовательность B.
И полученные результаты смысла никакого не имеют.

Даже если у вас будет генератор чисел с диапазоном кратным 2^N,
и распределение B не будет "кривым", оно все равно будет отличаться от распределения исходной последовательности.
И с помощью тестов NIST вы узнаете не параметры того, что вы хотите, а параметры бес его знает чего. (распиливание числа тоже кстати криво сделано)

Это принципиальная ошибка - распиливание чисел на последовательности битов.

Впрочем для тестирования битовых последовательностей вполне пригодно, но черезвычайно не удобно.
youri-pal вне форума Ответить с цитированием
Старый 10.09.2010, 19:47   #7
advancer
Новичок
Джуниор
 
Регистрация: 09.09.2010
Сообщений: 2
По умолчанию

А у Вас не осталось скомпилированного проекта? И хотя бы исходников? Просто для меня это действительно то что нужно
advancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хелп!!!Многие компоненты в т.ч. DelphiX не компилируются! NNN Компоненты Delphi 4 29.04.2008 16:35
Не все готовые исходники компилируются (Вопрос новичка) grey Помощь студентам 9 28.10.2007 19:18