Установка SystemC для VS2013

Я использую 64-разрядную версию Windows 10 с Visual Studio Professional 2013 и хочу установить SystemC. Я загрузил SystemC 2.3.1 и попытался выполнить предоставленные «Примечания по установке», но они слегка устаревший.

Во-первых, там написано «для VS 2005 и выше на машинах с Windows 7», но я использую Windows 10, тем не менее, я все еще пытался следовать ей. Во-вторых, включение файлов src и lib не может выполняться, как указано там, поскольку этот метод был изменен в VS2013. Похоже, что на вкладке Tools->Options->Projects->VCC++ направлений больше нет глобальных настроек.

Теперь я смог успешно построить решение SystemC.sln. Однако, когда я попытался создать примерный проект, я получил следующую ошибку:

ССЫЛКА: фатальная ошибка LNK1104: невозможно открыть файл 'C: \ Users \ Andrew \ Downloads \ systemc-2.3.1a \ systemc-2.3.1a \ msvc80 \ SystemC \ Debug.obj'

Хотя я думаю, что правильно указал каталоги src и lib в свойствах проекта.

Может ли кто-нибудь объяснить, как собрать SystemC с VS2013 в Windows 10 x64?


person Javia1492    schedule 01.02.2017    source источник
comment
Сейчас я использую SystemC 2.3.1a в сообществе Visual Studio 2017. При создании проекта вам необходимо 1) добавить флаги / vmg / MTd для в опциях C / C ++ 2) Указать путь к библиотеке в опциях компоновщика. Я могу создать пошаговый ответ для VS2017, если это поможет.   -  person random    schedule 02.02.2017
comment
Если вы можете это представить, это было бы полезно. Работает ли это для VS2013, я не уверен, но я попробую, поскольку все остальное, что я пробовал, не сработало.   -  person Javia1492    schedule 02.02.2017
comment
Хорошо, следите за обновлениями следующие пару часов. Обратите внимание, что SystemC 2.3.2 с официальной поддержкой VS2013 выходит в этом году. Но я использовал 2.3.1 в VS2013 / 2015 в течение многих лет без особых проблем.   -  person random    schedule 02.02.2017
comment
Да, я должен использовать 2.3.1, так как это на самом деле для курса, который я изучаю, и он рекомендует использовать VS 2013, так как в более новых версиях, по его словам, были проблемы. Я решил, что для простоты я сделаю то, что он предпочитает, на случай, если у меня возникнут проблемы позже.   -  person Javia1492    schedule 02.02.2017


Ответы (1)


Обновление: если вы используете CMake с Visual Studio, установите флажок Настройка проекта SystemC с помощью CMake: неопределенная ссылка на` sc_core

В настоящее время у меня нет установленного MSVC2013, поэтому вот шаги для MSVC2017, которые сработали для меня.

  1. Загрузите последнюю версию SystemC со страницы http://accellera.org/downloads/standards/systemc
  2. Откройте systemc-2.3.1a \ msvc80 \ SystemC \ SystemC.sln в Visual Studio.
  3. Visual Studio предложит обновить решение, нажмите ОК. Вы можете игнорировать отчет с предупреждениями.
  4. В строке меню VS установите для конфигурации значение «Отладка» «Win32». (В моем случае уже было выбрано по умолчанию)
  5. # P3 # # P4 #
    # P5 #
    # P6 #
    # P7 #
  6. В результате у вас будет SystemC.lib в systemc-2.3.1a \ msvc80 \ SystemC \ Debug

Теперь вы можете создать тестовый проект SystemC.

  1. Файл-> Создать -> Проект -> Консольное приложение Win32
  2. Щелкните правой кнопкой мыши проект в обозревателе решений -> Свойства
  3. В свойствах конфигурации -> C / C ++ -> Общие-> Дополнительные подключаемые каталоги

    Добавьте путь к: \ systemc-2.3.1a \ src

  4. В свойствах конфигурации -> C / C ++ -> Генерация кода -> Библиотека времени выполнения

    Выберите: Многопоточная отладка (/ MTd)

  5. В свойствах конфигурации -> C / C ++ -> Язык -> Включить информацию о типе времени выполнения

    Выберите: Да (/ GR)

  6. В свойствах конфигурации -> C / C ++ -> Командная строка -> Дополнительные параметры

    Тип: / vmg

  7. В Configuration Properties -> Linker -> General -> Additional Library Directories.

    Добавьте путь к: systemc-2.3.1a \ msvc80 \ SystemC \ Debug

  8. В Configuration Properties -> Linker -> Input -> Additional dependencies

    Добавить: SystemC.lib

Пришло время набрать код. Например, это «Привет, мир»:

#include "stdafx.h"

struct test_module : sc_module {
    SC_HAS_PROCESS(test_module);

    test_module(::sc_core::sc_module_name) {
        SC_THREAD(test_thread);
    }

    sc_signal<std::string>  message{ "message" };

    void test_thread() {
        message.write("Hello world!");
        wait(1, SC_NS);
        cout << message.read() << endl;
        sc_stop();
    }
};

int sc_main(int argc, char** argv)
{
    test_module tmod{ "tmod" };
    sc_start();
    return 0;
}

В stdafx.h добавить:

 #include <systemc.h>
  1. Соберите проект, он не удастся:
    # P24 #

gets был удален из пространства имен std в последних версиях MSVC, но на самом деле это не требуется. Так что просто откройте systemc.h и закомментируйте строку 120:

//    using std::gets;
  1. Если вы получили ошибку о sprintf

Добавить _CRT_SECURE_NO_WARNINGS в список определений препроцессора

  1. Строим снова. Запускать без отладки (Ctrl + F5). На консоли вы должны увидеть следующий вводный тест:
    SystemC 2.3.1-Accellera --- Feb  1 2017 14:43:06
    Copyright (c) 1996-2014 by all Contributors,
    ALL RIGHTS RESERVED

    Hello world!

    Info: /OSCI/SystemC: Simulation stopped by user.
    Press any key to continue . . .

надеюсь, это поможет

person random    schedule 01.02.2017
comment
Спасибо! Я попробую и расскажу, что происходит. - person Javia1492; 02.02.2017
comment
Хорошо, я просто попробовал и получил следующую ошибку: 1 ›c: \ users \ andrew \ downloads \ systemc-2.3.1a \ systemc-2.3.1a \ src \ sysc \ datatypes \ int \ sc_nbutils.h (151) : ошибка C4996: 'sprintf': эта функция или переменная может быть небезопасной. Вместо этого рассмотрите возможность использования sprintf_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Смотрите справку для деталей. 1 ›c: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ stdio.h (356): см. Объявление 'sprintf' - person Javia1492; 02.02.2017
comment
После добавления _CRT_SECURE_NO_WARNINGS в список определений препроцессора я перестроил, и он прошел! Спасибо вам за помощь! - person Javia1492; 02.02.2017
comment
Похоже, в моем случае он уже был включен по умолчанию. Я добавил его в ответ, на случай, если кто-нибудь с ним столкнется. - person random; 02.02.2017