Hi Jesse,
All of the undefined references you have are to the functions in the vendor's uldaq library.
The vendor library needs to be installed locally. It is provided in source code form, and is built with the standard autotools mechanism.
This is the part of the Makefile that builds the example IOC in measComp
Note that in addition to linking uldaq it also links the system library usb-1.0.
Mark
From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Jesse Hopkins via Tech-talk <tech-talk at aps.anl.gov>
Sent: Friday, October 11, 2024 4:05 PM
To: EPICS Tech Talk <tech-talk at aps.anl.gov>
Subject: Help adding Measurement Computing support to IOC
Hi folks,
I'm attempting to add support for Measurement Computing devices into an existing IOC (that I currently use with some LabJack devices). However, I'm having an issue with building the IOC.
As far as I can tell, the measurement computing support builds fine (I'm building it as part of synapps, but updated to the latest version of MeasComp in the git as of a couple of days ago). I can run one of the test IOCs that is
included with the support in the synapps build without issue (in this case for the E-TC).
The problem comes when I try to add the support to my IOC. I go to rebuild the IOC and I get the following errors:
(main) biocat@dalek:/opt/epics/iocs/epics_iocs/soft_iocs/test$ make
make -C ./configure install
make[1]: Entering directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/configure'
perl -CSD /opt/epics/base/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../..
mkdir -p O.Common
make -C O.linux-x86_64 -f ../Makefile TOP=../.. \
T_A=linux-x86_64 install
make[2]: Entering directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/configure/O.linux-x86_64'
perl -CSD /opt/epics/base/bin/linux-x86_64/convertRelease.pl checkRelease
make[2]: Leaving directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/configure/O.linux-x86_64'
make[1]: Leaving directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/configure'
make -C ./labjackApp install
make[1]: Entering directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/labjackApp'
make -C ./src install
make[2]: Entering directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/labjackApp/src'
perl -CSD /opt/epics/base/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../../..
mkdir -p O.Common
make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \
T_A=linux-x86_64 install
make[3]: Entering directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/labjackApp/src/O.linux-x86_64'
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -g -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/synApps_6_3/support/autosave-R5-11/include/os/Linux
-I/opt/epics/synApps_6_3/support/autosave-R5-11/include -I/opt/epics/synApps_6_3/support/asyn-R4-44-2/include -I/opt/epics/synApps_6_3/support/busy-R1-7-4/include -I/opt/epics/synApps_6_3/support/LabJack-master/include -I/opt/epics/synApps_6_3/support/measComp-master/include
-I/opt/epics/base/include/compiler/gcc -I/opt/epics/base/include/os/Linux -I/opt/epics/base/include -MM -MF labjackMain.d ../labjackMain.cpp
Creating dbd file labjack.dbd
perl -CSD /opt/epics/base/bin/linux-x86_64/dbdExpand.pl -I. -I.. -I../O.Common -I../../../dbd -I/opt/epics/synApps_6_3/support/autosave-R5-11/dbd -I/opt/epics/synApps_6_3/support/asyn-R4-44-2/dbd -I/opt/epics/synApps_6_3/support/busy-R1-7-4/dbd -I/opt/epics/synApps_6_3/support/LabJack-master/dbd
-I/opt/epics/synApps_6_3/support/measComp-master/dbd -I/opt/epics/base/dbd -o labjack.dbd base.dbd asyn.dbd busySupport.dbd asSupport.dbd LabJackSupport.dbd measCompSupport.dbd
perl -CSD /opt/epics/base/bin/linux-x86_64/registerRecordDeviceDriver.pl -I. -I.. -I../O.Common -I../../../dbd -I/opt/epics/synApps_6_3/support/autosave-R5-11/dbd -I/opt/epics/synApps_6_3/support/asyn-R4-44-2/dbd -I/opt/epics/synApps_6_3/support/busy-R1-7-4/dbd
-I/opt/epics/synApps_6_3/support/LabJack-master/dbd -I/opt/epics/synApps_6_3/support/measComp-master/dbd -I/opt/epics/base/dbd -o labjack_registerRecordDeviceDriver.cpp \
../O.Common/labjack.dbd labjack_registerRecordDeviceDriver /opt/epics/iocs/epics_iocs/soft_iocs/test
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -g -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/synApps_6_3/support/autosave-R5-11/include/os/Linux
-I/opt/epics/synApps_6_3/support/autosave-R5-11/include -I/opt/epics/synApps_6_3/support/asyn-R4-44-2/include -I/opt/epics/synApps_6_3/support/busy-R1-7-4/include -I/opt/epics/synApps_6_3/support/LabJack-master/include -I/opt/epics/synApps_6_3/support/measComp-master/include
-I/opt/epics/base/include/compiler/gcc -I/opt/epics/base/include/os/Linux -I/opt/epics/base/include -MM -MF labjack_registerRecordDeviceDriver.d labjack_registerRecordDeviceDriver.cpp
Installing created dbd file ../../../dbd/labjack.dbd
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -g -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/synApps_6_3/support/autosave-R5-11/include/os/Linux
-I/opt/epics/synApps_6_3/support/autosave-R5-11/include -I/opt/epics/synApps_6_3/support/asyn-R4-44-2/include -I/opt/epics/synApps_6_3/support/busy-R1-7-4/include -I/opt/epics/synApps_6_3/support/LabJack-master/include -I/opt/epics/synApps_6_3/support/measComp-master/include
-I/opt/epics/base/include/compiler/gcc -I/opt/epics/base/include/os/Linux -I/opt/epics/base/include -c labjack_registerRecordDeviceDriver.cpp
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -g -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/synApps_6_3/support/autosave-R5-11/include/os/Linux
-I/opt/epics/synApps_6_3/support/autosave-R5-11/include -I/opt/epics/synApps_6_3/support/asyn-R4-44-2/include -I/opt/epics/synApps_6_3/support/busy-R1-7-4/include -I/opt/epics/synApps_6_3/support/LabJack-master/include -I/opt/epics/synApps_6_3/support/measComp-master/include
-I/opt/epics/base/include/compiler/gcc -I/opt/epics/base/include/os/Linux -I/opt/epics/base/include -c ../labjackMain.cpp
/usr/bin/g++ -o labjack -L/opt/epics/iocs/epics_iocs/soft_iocs/test/lib/linux-x86_64 -L/opt/epics/base/lib/linux-x86_64 -L/opt/epics/synApps_6_3/support/LabJack-master/lib/linux-x86_64 -L/opt/epics/synApps_6_3/support/asyn-R4-44-2/lib/linux-x86_64 -L/opt/epics/synApps_6_3/support/autosave-R5-11/lib/linux-x86_64
-L/opt/epics/synApps_6_3/support/busy-R1-7-4/lib/linux-x86_64 -L/opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64 -Wl,-rpath,/opt/epics/iocs/epics_iocs/soft_iocs/test/lib/linux-x86_64 -Wl,-rpath,/opt/epics/base/lib/linux-x86_64 -Wl,-rpath,/opt/epics/synApps_6_3/support/LabJack-master/lib/linux-x86_64
-Wl,-rpath,/opt/epics/synApps_6_3/support/asyn-R4-44-2/lib/linux-x86_64 -Wl,-rpath,/opt/epics/synApps_6_3/support/autosave-R5-11/lib/linux-x86_64 -Wl,-rpath,/opt/epics/synApps_6_3/support/busy-R1-7-4/lib/linux-x86_64 -Wl,-rpath,/opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64
-rdynamic -m64 labjack_registerRecordDeviceDriver.o labjackMain.o -lLabJack -lbusy -lautosave -lasyn -lLabJackM -lmeasComp -ldbRecStd -ldbCore -lca -lCom
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAOutScanStop'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAInScanStop'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDaqInScan'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDIn'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAISetConfigDbl'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDaqInSetTrigger'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulTIn'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDevGetConfigStr'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCLoad'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAOutScanStatus'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulGetNetDaqDeviceDescriptor'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulGetDaqDeviceInventory'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCIn'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDaqInScanStop'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulReleaseDaqDevice'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAOGetInfo'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCreateDaqDevice'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAInScan'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDaqInScanStatus'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAInScanStatus'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulTmrPulseOutStop'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAIn'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAOutScan'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDIOGetInfo'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDConfigPort'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAOut'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulConnectDaqDevice'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDBitOut'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulGetErrMsg'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCClear'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulGetInfoStr'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDOut'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAInLoadQueue'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulDConfigBit'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCConfigScan'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCInScanStop'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulTmrPulseOutStart'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAISetConfig'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulAIGetInfo'
/usr/bin/ld: /opt/epics/synApps_6_3/support/measComp-master/lib/linux-x86_64/libmeasComp.so: undefined reference to `ulCInScan'
collect2: error: ld returned 1 exit status
make[3]: *** [/opt/epics/base/configure/RULES_BUILD:231: labjack] Error 1
make[3]: Leaving directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/labjackApp/src/O.linux-x86_64'
make[2]: *** [/opt/epics/base/configure/RULES_ARCHS:58: install.linux-x86_64] Error 2
make[2]: Leaving directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/labjackApp/src'
make[1]: *** [/opt/epics/base/configure/RULES_DIRS:85: src.install] Error 2
make[1]: Leaving directory '/opt/epics/iocs/epics_iocs/soft_iocs/test/labjackApp'
make: *** [/opt/epics/base/configure/RULES_DIRS:85: labjackApp.install] Error 2
Here's the contents of my src/Makefile:
TOP=../..
include $(TOP)/configure/CONFIG
#----------------------------------------
# ADD MACRO DEFINITIONS AFTER THIS LINE
#=============================
#=============================
# Build the IOC application
PROD_IOC = labjack
# labjack.dbd will be created and installed
DBD += labjack.dbd
# labjack.dbd will be made up from these files:
labjack_DBD += base.dbd
# Include dbd files from all support applications:
labjack_DBD += asyn.dbd
labjack_DBD += busySupport.dbd
labjack_DBD += asSupport.dbd
labjack_DBD += LabJackSupport.dbd
labjack_DBD += measCompSupport.dbd
# Add all the support libraries needed by this IOC
labjack_LIBS += LabJack
labjack_LIBS += busy
labjack_LIBS += autosave
labjack_LIBS += asyn
labjack_LIBS += LabJackM
labjack_LIBS += measComp
# labjack_registerRecordDeviceDriver.cpp derives from labjack.dbd
labjack_SRCS += labjack_registerRecordDeviceDriver.cpp
# Build the main IOC entry point on workstation OSs.
labjack_SRCS_DEFAULT += labjackMain.cpp
# Add support from base/src/vxWorks if needed
#labjack_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary
# Finally link to the EPICS Base libraries
labjack_LIBS += $(EPICS_BASE_IOC_LIBS)
#===========================
include $(TOP)/configure/RULES
#----------------------------------------
# ADD RULES AFTER THIS LINE
In case it helps, I'm attempting to build this on Debian 12, and I did install the libuldaq-1.2.1 vendor drivers as instructed.
If anyone has insight into what's going wrong that would be great. The IOC builds fine if I remove the measComp DBD and LIBS in the Makefile, but otherwise gives the above errors.
All the best.
- Jesse
----
Jesse Hopkins, PhD
Deputy Director
BioCAT, Sector 18
Advanced Photon Source
|