Dear all,
I am trying to work with OPC UA device support, based on Unified Automation OPC UA C++ based client library : https://github.com/epics-modules/opcua
I am only using Unified Automation evaluation bundle so far.
I am using Centos 7. Unified Automation SDK was compiled with gcc 9.4.0, openssl 1.1.1k and libxml 2.9.1. Everything went OK when compiling the SDK as far as I can see.
devOpcuaSup compiles without errors as well.
At IOC compilation, I encounter the following error and can’t get rid of it :
/usr/local/bin/g++ -o iocRfqRfAmplifiers -L/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64 -L/iee/base/lib/linux-x86_64 -Wl,-rpath,/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64
-Wl,-rpath,/iee/base/lib/linux-x86_64 -rdynamic -m64 iocRfqRfAmplifiers_registerRecordDeviceDriver.o iocRfqRfAmplifiersMain.o -lopcua -ldbRecStd -ldbCore -lca -lCom
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getParentNode()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getNodeName()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::getChild(char const*)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getRootNode()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::~UaXmlDocument()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::getContent(UaXmlValue&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::getAttributeValue(char const*, UaXmlValue&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::UaXmlElement()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getNextSibling()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getNamespace() const'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::cleanupParser()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::UaXmlElement(UaXmlElement const&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getNamespace(char const*) const'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::getChildElements(char const*, std::__cxx11::list<UaXmlElement, std::allocator<UaXmlElement>
>&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::UaXmlDocument()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::initParser()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getChildElements(char const*, std::__cxx11::list<UaXmlElement, std::allocator<UaXmlElement>
>&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlValue::UaXmlValue()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::getParentNode()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getFirstChild()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::loadXmlText(char const*, int, char const*)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlDocument::getAttributeValue(char const*, UaXmlValue&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::operator=(UaXmlElement const&)'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlValue::~UaXmlValue()'
/home/gd265689/local_tops/topOpcUa/lib/linux-x86_64/libopcua.so: undefined reference to `UaXmlElement::~UaXmlElement()'
collect2: error: ld returned 1 exit status
make[3]: *** [iocRfqRfAmplifiers] Error 1
make[3]: Leaving directory `/home/gd265689/local_tops/topOpcUa/iocBoot/iocRfqRfAmplifiers/src/O.linux-x86_64'
make[2]: *** [install.linux-x86_64] Error 2
make[2]: Leaving directory `/home/gd265689/local_tops/topOpcUa/iocBoot/iocRfqRfAmplifiers/src'
make[1]: *** [src.install] Error 2
make[1]: Leaving directory `/home/gd265689/local_tops/topOpcUa/iocBoot/iocRfqRfAmplifiers'
make: *** [iocRfqRfAmplifiers.install] Error 2
My top contains :
-
sdk folder : Unified Automation SDK
-
devOpcuaSup : the EPICS device support for OPC UA
-
iocRfqRfAmplifiers : my IOC
Here is my CONFIG_SITE.local:
GNU_BIN = /usr/local/bin
USR_CFLAGS += -std=c11
USR_CXXFLAGS += -std=c++11
CROSS_COMPILER_TARGET_ARCHS =
XML_INCLUDE = /usr/include/libxml2
XML_DIR = /usr/lib64
# Path to the Unified Automation OPC UA C++ SDK
UASDK = /home/gd265689/local_tops/topOpcUa/sdk
# How the Unified Automation SDK shared libraries are deployed
# SYSTEM = shared libs are in a system location
# PROVIDED = shared libs are in $(UASDK_SHRLIB_DIR)
# INSTALL = shared libs are installed (copied) into this module
# EMBED = link SDK code statically into libopcua,
# SDK libraries are not required on target system
UASDK_DEPLOY_MODE = EMBED
UASDK_LIB_DIR = $(UASDK)/lib
UASDK_SHRLIB_DIR = $(UASDK_LIB_DIR)
# How the Unified Automation SDK libraries were built
UASDK_USE_CRYPTO = NO
UASDK_USE_XMLPARSER = NO
include $(TOP)/configure/CONFIG_OPCUA_VERSION
My RELEASE.local :
OPCUA = /home/gd265689/local_tops/topOpcUa/devOpcuaSup
I added the following line in devOpcuaSup makefile to get rid of “openssl not found errors”
USR_INCLUDES += -I/usr/include/openssl
Can you please help me to find what is missing in my configuration ? Thank you very much !
Gabriel Desmarchelier
CEA Paris-Saclay