Консольные проблемы Fuzzylite с интеграцией с Castalia Simulator - PullRequest
0 голосов
/ 01 июня 2018

Я изо всех сил пытался интегрировать Fuzzylite в мой симулятор Castalia, поэтому пока существует ошибка, связанная с Console.cpp в папке Fuzzylite src.Чтобы связать Fuzzylite с моим симулятором Castalia, я добавил EXTOPTS в файл makemake под Castalia,

#!/bin/bash

ROOT=`pwd`

# The following options are used by OMNeT's opp_makemake tool
# For explanation and a complete list of options run: opp_makemake -h
OPTS=" -f -r --deep -o CastaliaBin -u Cmdenv -P $ROOT -M release"

# -X excludes a directory from being considered
EXCLUDEDIRS=" -X Simulations -X out -X bin"

# Use options -I -L -l to include external header files or libraries    

EXTOPTS="-I /home/utar/Desktop/HY/fuzzylite-6.0/fuzzylite/ -L /home/utar/Desktop/HY/fuzzylite-6.0/fuzzylite/release/bin/ -lfuzzylite"



# Run OMNeT's opp_makemake tool with the above options
opp_makemake $OPTS $EXCLUDEDIRS $EXTOPTS

Тогда, пока компиляция проходит гладко, симуляция просто не может бытьзапустить.После отслеживания файла я могу отследить источник проблемы, который возникает из файла Castalia bin, написанного на Python.Ниже приведен фрагмент кода, который меня интересует:

r_castalia = re.compile("^Castalia\|\s+(.+)$")
r_scenario = re.compile("Scenario:\s(.*)\$repetition=(\d+)$")
r_progress = re.compile("^\*\* Event \#\d+\s+T=(\S+)\s+Elapsed: (\S+)s.+\s(\d+)\% completed")
r_newrun = re.compile("Preparing for running configuration General, run #(\d+)")
r_totalrun = re.compile("Number of runs: (\d+)")

for ini in iniList:
    ini_num += 1
    baselabel = label = labelList.pop(0) 

    f = open("omnetpp.tmp","w")
    f.write("[General]\n")
    f.write("repeat = " + str(options.repeat) + "\n")
    for k in sorted(ini.keys()):
        f.write(k + " = " + ini[k] + "\n")
    f.close();
    has_output = 0

    print "path to CastaliaBint is : " +  pathToCastaliaBin 

    if sys.version_info > (2,7):
        data = subprocess.check_output([pathToCastaliaBin, '-f', 'omnetpp.tmp', '-x', 'General']).split("\n")

        #data = subprocess.check_output(["/home/utar/Desktop/Castalia/CastaliaBin", '-f', 'omnetpp.tmp', '-x', 'General']).split("\n")

    else:
        data = subprocess.Popen([pathToCastaliaBin, '-f', 'omnetpp.tmp', '-x', 'General'], stdout=subprocess.PIPE).communicate()[0].split("\n")

    if len(data) > 6: data = data[6]
    else: 
        data = ""

    m = r_totalrun.match(data)

    print "r_totalrun is : " + str(r_totalrun) 
    if (m):
        runs = "/" + m.group(1)
    else:
        print "WARNING: unable to determine total simulation runs"
        runs = ""

В результате выходные данные показывают мне это:

ПРЕДУПРЕЖДЕНИЕ: невозможно определить общее количество прогонов моделирования

Здесь основное внимание уделяется:

if sys.version_info > (2,7):
    data = subprocess.check_output([pathToCastaliaBin, '-f', 'omnetpp.tmp', '-x', 'General']).split("\n")

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

данные - это ['опция параметра] опция <-f> не распознана', '{at /src/Console.cpp::parse () [строка: 134]}', ”,”]

Я понимаю, что CastaliaBin каким-то образом выполняет Console.cpp, который находится в файле src Fuzzylite !!!

Переменная pathToCastaliaBin фактически является путем к / home / utar/ Desktop / Castalia / CastaliaBin, где CastaliaBin - исполняемый файл.

Для нормальных условий, когда библиотека Fuzzylite не включена в Castalia Simulator, когда я набираю CastaliaBin в командной строке, она будет выглядеть следующим образом: Перед включением Fuzzylite

После того, как я связал Fuzzylite с Castalia, он показывает: После включения Fuzzylite

Как вы можете видеть, CastaliaBin каким-то образом выполняет код в Fuzzylite !!!

Поэтому я бы хотел, чтобы кто-нибудь протянул мне руку помощи.Я был бы очень признателен.Заранее спасибо !!!

Ответы [ 2 ]

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

дважды проверьте включенный вами проект Fuzzylite (.cc и .h). Убедитесь, что у включаемых файлов нет функции main ().Основная функция будет конфликтовать с настройками проекта Castalia или Omnetpp

0 голосов
/ 06 июня 2018

Хорошая работа, объясняющая вашу проблему полностью и исследующая ее самостоятельно.

Из полученного вывода кажется, что когда вы запускаете makemake для сборки Castalia, она создает fuzzylite, а CastaliaBin в основном запускает инструмент командной строки для библиотеки fuzzylite.Очевидно, это не то, что вам нужно.

Убедитесь, что:

  • Перед сборкой Castalia вы собрали фаззилит в соответствии с инструкцией по установке этой библиотеки.Если все сделано успешно, вы сможете найти имя файла libfuzzylite.a или libfuzzylite.so в каталоге fuzzylite (или там, где его установит процесс установки.

  • Обратите внимание, где находится этот файл библиотекинаходится (это каталог) и используйте этот каталог с ключом * 1017. * Может быть, библиотека находится не в release/bin/

  • Найдите каталог header-files и используйте его с -I switch. Не включайте весь каталог fuzzylite. Глядя на Github repo Fyzzylite , кажется, что каталог заголовка fuzzylite/fuzzylite/fl/

Наконец вотОбщая информация о компиляции статических библиотек в C, так что вы можете получить лучшую перспективу. Я подозреваю, что процесс установки Fuzzylite скрывает большую часть этого, но хорошо знать общие принципы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...