Сборка open62541 DLL с помощью Visual Studio 2017
Здравствуйте, сообщество! Я хотел бы написать пользовательский интерфейс для OPC UA сервера, используя open62541 lib. Программное обеспечение для ввода должно прочитать текстовый файл и привести данные через сервер к уже доступному клиенту.
Застрял на этапе, когда нужно скомпилировать файл DLL для дальнейшего использования его в проекте Windows Forms.
В некоторых источниках упоминается, что Дэви Трипонни скомпилировал его с помощью Visual C++ 2013 https://github.com/open62541/open62541/wiki/Using-open62541-from-C%23
Но мне не везет с VS 2017.
Существует последовательность моего прогресса:
- Уже загружены 64-битные файлы.h и.c windows с https://open62541.org/
- Создан проект библиотеки динамических ссылок (DLL).
- Прикрепленные файлы.h и.c к проекту, выбранный 64 компилятор:
Получение много предупреждений и ошибок при сборке:
Severity Code Description Project File Line Suppression State
Warning C4005 'CLOSESOCKET': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39113
Warning C4005 '_Q_INVALIDATE': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 130
Warning C4005 'UA_atomic_sync': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 813
Warning C4005 'UA_atomic_sync': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 815
Warning C4005 'CLOSESOCKET': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 35386
Warning C4005 'errno__': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 35387
Warning C4005 'CLOSESOCKET': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39088
Warning C4005 'CLOSESOCKET': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39106
Warning C4005 'UA_sleep_ms': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39111
Warning C4005 'UA_sleep_ms': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39127
Warning C4005 'UA_sleep_ms': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39130
Warning C4005 'WIN32_INT': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39135
Warning C4005 'OPTVAL_TYPE': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39136
Warning C4005 'ERR_CONNECTION_PROGRESS': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39137
Warning C4005 'UA_fd_set': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39167
Warning C4005 'UA_fd_isset': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39168
Warning C4005 'errno__': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39176
Warning C4005 'errno__': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39181
Warning C4005 'INTERRUPTED': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39182
Warning C4005 'WOULDBLOCK': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39183
Warning C4005 'AGAIN': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39184
Warning C4005 'ANSI_COLOR_RED': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40158
Warning C4005 'ANSI_COLOR_GREEN': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40159
Warning C4005 'ANSI_COLOR_YELLOW': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40160
Warning C4005 'ANSI_COLOR_BLUE': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40161
Warning C4005 'ANSI_COLOR_MAGENTA': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40162
Warning C4005 'ANSI_COLOR_CYAN': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40163
Warning C4005 'ANSI_COLOR_RESET': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40164
Warning C4005 'BEGIN_CRITSECT': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40709
Warning C4005 'END_CRITSECT': macro redefinition open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40710
Error C1010 unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source? open62541 c:\users\scadaadmin\desktop\open62541-win64\open62541.c 43979
Вопрос в том, как свойство я могу скомпилировать файл open62541 c code dll с Visual Studio 2017, чтобы использовать его в приложении Windows Form C# в качестве сервера?
1 ответ
Поскольку проект open62541 был обновлен, я предлагаю вам непосредственно взять текущее состояние источников. Таким образом, вы сможете лучше использовать примеры, которые они предоставляют. Вот руководство по созданию проекта. Может быть, это может быть проще, но я столкнулся с множеством проблем, поэтому я дам вам все шаги, которые я сделал.
ПОДГОТОВКА ОКРУЖАЮЩЕЙ СРЕДЫ
- Установите cmake (с обновлением PATH)
- Установите последнюю версию python (с обновлением PATH)
https://www.python.org/downloads/
Снова откройте сеанс, чтобы новые переменные PATH были приняты во внимание
Установите модуль Python "шесть"
пип установить шесть
СТРОИТЕЛЬСТВО MBEDTLS
- Скачать исходники библиотеки (лицензия apache)
- Запустите cmake в источниках
cmake . -DUSE_SHARED_MBEDTLS_LIBRARY=ON -D CMAKE_BUILD_TYPE=Release
Откройте "mbed TLS.sln" в Visual Studio (я использую Community 2015) и сгенерируйте все в режиме "Release"
Скопируйте следующие файлы
- библиотеки.lib из "библиотеки \ выпуска" в "путь \ к \OpcUa_lib"
- двоичные файлы.dll из "библиотеки \ выпуска" в "путь \ к \OpcUa_bin"
- папка "mbedtls" в "include" в "Path\To\OpcUa_include"
ЗДАНИЕ OPEN62541
- Клонируйте репозиторий open62541, чтобы получить исходные коды (с помощью рабочего стола или командной строки GitHub)
https://github.com/open62541/open62541
Создайте папку "build" в исходниках (например, C:\Users\Davy\Documents\GitHub\open62541\build)
Откройте терминал в папке "build" и запустите cmake (сначала перейдите в \ путь \ к...)
cmake .. -G "Visual Studio 14 2015" -DUA_ENABLE_ENCRYPTION=ON -DUA_ENABLE_AMALGAMATION=ON -DMBEDTLS_INCLUDE_DIRS="Path\To\OpcUa_include" -DMBEDTLS_LIBRARY="Path\To\OpcUa_lib" -DMBEDX509_LIBRARY="Path\To\OpcUa_lib" -DMBEDCRYPTO_LIBRARY="Path\To\OpcUa_lib" -DBUILD_SHARED_LIBS=ON -D CMAKE_BUILD_TYPE=Release -DUA_LOGLEVEL=100
Откройте решение "build\open62541.sln" в Visual Studio (Community 2015) и добавьте "mbedcrypto.lib", "mbedtls.lib" и "mbedx509.lib" в качестве ресурсов для компоновщика в проекте "open62541/lib/open62541"
- щелкните правой кнопкой мыши на "open62541/lib/open62541", выберите "Свойства"
- перейти к "Linker" => "Общие"
- добавьте "Path\To\OpcUa_lib" в качестве дополнительного каталога для зависимостей
- перейти к "Linker" => "Entry"
- добавьте три строки с "mbedcrypto.lib", "mbedtls.lib" и "mbedx509.lib" в "Дополнительные зависимости"
Сгенерируйте "open62541 / lib / open62541" в режиме "Release"
Теперь вы можете использовать следующие файлы
- библиотека "build\bin\Release\open62541.lib"
- двоичный файл "build\bin\Release\open62541.dll"
- файл "build\open62541.h"
ИНТЕГРАЦИЯ В ДРУГОЙ ПРОЕКТ
Вам нужно будет сослаться на объединенный.h open62541 и добавить эти зависимости в компоновщик: open62541.lib, mbedcrypto.lib, mbedtls.lib, mbedx509.lib, Ws2_32.lib. Мне также пришлось указать платформу Visual Studio 2013 (v120) в свойствах проекта.