Closed LeeYangLBLBCS closed 2 years ago
The C API is installed with the Automation1 software on Windows. On my system it is found here:
C:\Program Files\Aerotech\Automation1-MDK\APIs\C
@kmpeters is correct. You must install Automation1 MDK on your Windows PC to get access to the C API for both Windows and Linux.
thanks for the help. I found the linux C API. I'd like to compile and try it on my linux system. However I hesitated when I read the following in the front page: "motorAutomation1 only supports fixed profile motion at a rate of one point per millisecond". Does it mean nothing else works except the profile motion? If that's true, this driver is not quite ready for general use yet, correct?
"motorAutomation1 only supports fixed profile motion at a rate of one point per millisecond" is under the "Profile Motion" section of the readme, meaning that profile motion must be fixed time internal, 1 kHz trajectory rate. However, the Automation1 EPICS driver supports other kinds of motion and features as one would expect.
Perhaps the wording of that warning could be made more clear?
I got this link error - it seems to be looking for "Automation1.a" that is not in the Linux Lib supplied by Aerotech (not in V2.1.1 anyway). Am I using the wrong automation1 MDK version? I'm using V2.1.1. There are only two files in the latest installation (Automation1 MDK 2.1.1): 11/12/2021 08:17 PM 19,932,704 libautomation1c.so 11/12/2021 08:11 PM 2,318,528 libautomation1compiler.so =================================== link error================= make[5]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src/O.linux-x86_64' /usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X8664 -DUNIX -Dlinux -O3 -Wall -DDEBUG -mtune=generic -m64 -fPIC -I. -I../O.Common -I. -I. -I.. -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include/compiler/gcc -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include/os/Linux -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/include -I/opt/epics/base-7.0.4/include/compiler/gcc -I/opt/epics/base-7.0.4/include/os/Linux -I/opt/epics/base-7.0.4/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/include -MM -MF Automation1MotorController.d ../Automation1MotorController.cpp /usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X8664 -DUNIX -Dlinux -O3 -Wall -DDEBUG -mtune=generic -m64 -fPIC -I. -I../O.Common -I. -I. -I.. -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include/compiler/gcc -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include/os/Linux -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/include -I/opt/epics/base-7.0.4/include/compiler/gcc -I/opt/epics/base-7.0.4/include/os/Linux -I/opt/epics/base-7.0.4/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/include -MM -MF Automation1MotorAxis.d ../Automation1MotorAxis.cpp make[5]: No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'libAutomation1.a'. Stop. make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src/O.linux-x86_64' make[4]: [/opt/epics/base-7.0.4/configure/RULES_ARCHS:58: install.linux-x86_64] Error 2 make[4]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src' make[3]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: src.install] Error 2 make[3]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App' make[2]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1App.install] Error 2 make[2]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1' make[1]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: motorAutomation1.install] Error 2 make[1]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules'
You can ignore that fact the it is looking for .a rather than .so, either would work. But the problem is that it is looking for a library called libAutomation1and yours is called libautomation1c. So both the case and the last character are wrong.
@LeeYangLBLBCS Have you defined the path to motorAutomation1 in RELEASE.local? I experienced a similar compiler error that was resolved by adding MOTOR_AUTOMATION1 = <path to motorAutomation1>
to RELEASE.local (in my case, RELEASE.linux-x86_64.local located in the modules folder).
It might be a good idea to document this change more clearly in the README.md.
#automation1_LIBS += Automation1
The linker stopped asking for "Automation1.a".
But the new error says it can't find functions defined in "automation1compiler.so".
Could it be the linux API does not match the EPICS code anymore, for whatever reason?
=====================================================
make[6]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/configure/O.linux-x86_64-debug'
perl -CSD /opt/epics/base-7.0.4/bin/linux-x86_64/convertRelease.pl checkRelease
make[6]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/configure/O.linux-x86_64-debug'
make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/configure'
make -C ./automation1App install
make[5]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App'
make -C ./src install
make[6]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src'
make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \
T_A=linux-x86_64 install
make[7]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64'
Creating dbd file automation1.dbd
perl -CSD /opt/epics/base-7.0.4/bin/linux-x86_64/dbdExpand.pl -I. -I.. -I../O.Common -I../../../dbd -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/dbd -I/opt/epics/base-7.0.4/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/dbd -o automation1.dbd base.dbd asyn.dbd drvAsynSerialPort.dbd drvAsynIPPort.dbd busySupport.dbd motorSupport.dbd devAutomation1Motor.dbd
perl -CSD /opt/epics/base-7.0.4/bin/linux-x86_64/registerRecordDeviceDriver.pl -I. -I.. -I../O.Common -I../../../dbd -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/dbd -I/opt/epics/base-7.0.4/dbd -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/dbd -o automation1_registerRecordDeviceDriver.cpp ../O.Common/automation1.dbd automation1_registerRecordDeviceDriver /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/include -I/opt/epics/base-7.0.4/include/compiler/gcc -I/opt/epics/base-7.0.4/include/os/Linux -I/opt/epics/base-7.0.4/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/include -MM -MF automation1_registerRecordDeviceDriver.d automation1_registerRecordDeviceDriver.cpp
Installing created dbd file ../../../dbd/automation1.dbd
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/include -I/opt/epics/base-7.0.4/include/compiler/gcc -I/opt/epics/base-7.0.4/include/os/Linux -I/opt/epics/base-7.0.4/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/include -c automation1_registerRecordDeviceDriver.cpp
/usr/bin/g++ -o automation1 -L/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/asyn-R4-38/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/busy-R1-7-2/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/seq-2-2-7/lib/linux-x86_64 -L/opt/epics/base-7.0.4/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/asyn-R4-38/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/busy-R1-7-2/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/seq-2-2-7/lib/linux-x86_64 -Wl,-rpath,/opt/epics/base-7.0.4/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64 -rdynamic -m64 automation1_registerRecordDeviceDriver.o automation1Main.o -lautomation1compiler -lautomation1c -lmotor -lasyn -lbusy -lseq -lpv -ldbRecStd -ldbCore -lca -lCom
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Files_WriteBytes'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Task_ProgramStop'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_HomeAsync'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Execute'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_StatusConfig_Destroy'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_MoveAbsolute'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_Destroy'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_StatusConfig_AddAxisStatusItem'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_GetAxisResults'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Disable'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_MoveFreerun'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_SetupAxisRampValue'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_GetResults'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_ConnectWithHost'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Controller_Start'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_PositionOffsetSet'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Task_ProgramRun'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_ClearAllDataSignals'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_StatusConfig_Create'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Controller_IsRunning'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Enable'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_GetStatus'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Task_GetStatus'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_AddAxisDataSignal'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Abort'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_Stop'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_Create'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_GetLastError'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_GetLastErrorMessage'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_MoveIncremental'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Status_GetResults'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Disconnect'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Parameter_GetAxisValue'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_AcknowledgeAll'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_Start'
collect2: error: ld returned 1 exit status
make[7]: *** [/opt/epics/base-7.0.4/configure/RULES_BUILD:213: automation1] Error 1
make[7]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64'
make[6]: *** [/opt/epics/base-7.0.4/configure/RULES_ARCHS:58: install.linux-x86_64] Error 2
make[6]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src'
make[5]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: src.install] Error 2
make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App'
make[4]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1App.install] Error 2
make[4]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC'
make[3]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1IOC.install] Error 2
make[3]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs'
make[2]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: iocs.install] Error 2
make[2]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1'
make[1]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: motorAutomation1.install] Error 2
make[1]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules'
You do need to tell it to link with that library. You cannot comment it out, you need to fix it. Why are you getting this error: '``` make[5]: *** No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'libAutomation1.a'.
It should not be looking for libAutomation1 it should be looking for libautomation1c according to the Makefile. Are you sure you are using the most recent version of the Makefile?
I downloaded a fresh copy from Gibhub to make sure I got the latest one. I still got the same linker error. I ran the command:nm -D --defined-only libautomation1c.so |grep Automation1_ to confirm all the complained functions referenced are actually in libautomation1c.so .
=======================================================
00000000002c7a70 T Automation1_Command_Abort
00000000002eca10 T Automation1_Command_AcknowledgeAll
00000000002ce9a0 T Automation1_Command_AnalogInputGet
00000000002cece0 T Automation1_Command_AnalogOutputGet
0000000000301130 T Automation1_Command_AnalogOutputSet
00000000002ef9b0 T Automation1_Command_CammingFreeTable
00000000002e4950 T Automation1_Command_CammingLoadTableFromArray
00000000002f6dc0 T Automation1_Command_CammingOff
00000000002d2220 T Automation1_Command_CammingOn
00000000002ecc00 T Automation1_Command_CornerRoundingOff
00000000002ecdf0 T Automation1_Command_CornerRoundingOn
00000000002d8520 T Automation1_Command_CornerRoundingSetAxes
00000000002ee570 T Automation1_Command_CornerRoundingSetTolerance
00000000002f00c0 T Automation1_Command_CTransformationDisable
00000000002efe30 T Automation1_Command_CTransformationEnable
00000000002ffe50 T Automation1_Command_CTransformationGetProperty
00000000002f7e00 T Automation1_Command_CTransformationSetProperty
00000000002cf020 T Automation1_Command_DigitalInputGet
00000000002cf360 T Automation1_Command_DigitalOutputGet
0000000000301c80 T Automation1_Command_DigitalOutputSet
00000000002c7eb0 T Automation1_Command_Disable
00000000002dad20 T Automation1_Command_DriveArrayWrite
00000000002f21a0 T Automation1_Command_DriveBrakeOff
00000000002f1f00 T Automation1_Command_DriveBrakeOn
00000000002d16f0 T Automation1_Command_DriveDataCaptureConfigureArray
0000000000302bc0 T Automation1_Command_DriveDataCaptureConfigureInput
00000000003027f0 T Automation1_Command_DriveDataCaptureConfigureTrigger
00000000002fd1b0 T Automation1_Command_DriveDataCaptureOff
00000000002ff190 T Automation1_Command_DriveDataCaptureOn
00000000003018b0 T Automation1_Command_DriveEncoderOutputConfigureDivider
0000000000303360 T Automation1_Command_DriveEncoderOutputConfigureInput
00000000002fce80 T Automation1_Command_DriveEncoderOutputOff
0000000000302f90 T Automation1_Command_DriveEncoderOutputOn
00000000002d31a0 T Automation1_Command_DriveGetItem
00000000002e2d50 T Automation1_Command_DrivePulseStreamConfigure
00000000002f2440 T Automation1_Command_DrivePulseStreamOff
00000000002f1c60 T Automation1_Command_DrivePulseStreamOn
00000000002fb500 T Automation1_Command_DriveSetAuxiliaryFeedback
00000000002f8860 T Automation1_Command_DriveSetPositionCommand
00000000002f8530 T Automation1_Command_DriveSetPositionFeedback
00000000002d5cd0 T Automation1_Command_Enable
00000000002c96d0 T Automation1_Command_Execute
00000000002ccf90 T Automation1_Command_ExecuteAndReturnAeroScriptAxis
00000000002cbc80 T Automation1_Command_ExecuteAndReturnAeroScriptInteger
00000000002ca970 T Automation1_Command_ExecuteAndReturnAeroScriptReal
00000000002c82f0 T Automation1_Command_ExecuteAndReturnAeroScriptString
00000000002d7500 T Automation1_Command_FaultAcknowledge
00000000002fdb40 T Automation1_Command_FaultThrow
00000000002fab70 T Automation1_Command_GalvoConfigureLaser1PulseWidth
00000000002fa510 T Automation1_Command_GalvoConfigureLaser2PulseWidth
0000000000300d90 T Automation1_Command_GalvoConfigureLaserDelays
00000000002fbe90 T Automation1_Command_GalvoConfigureLaserMode
00000000002fa840 T Automation1_Command_GalvoConfigureLaserOutputPeriod
00000000002fb1d0 T Automation1_Command_GalvoConfigureStandbyPeriod
00000000002f9eb0 T Automation1_Command_GalvoConfigureStandbyPulseWidth
00000000002faea0 T Automation1_Command_GalvoConfigureSuppressionPulseWidth
00000000002fa1e0 T Automation1_Command_GalvoEncoderScaleFactorSet
00000000002fb830 T Automation1_Command_GalvoLaserOutput
00000000002f36a0 T Automation1_Command_GalvoProjectionOff
00000000002f3be0 T Automation1_Command_GalvoProjectionOn
00000000002d9540 T Automation1_Command_GalvoProjectionSetCoefficients
00000000002f9b80 T Automation1_Command_GalvoRotationSet
00000000002f3940 T Automation1_Command_GalvoWobbleOff
00000000002f3e80 T Automation1_Command_GalvoWobbleOn
00000000002d29f0 T Automation1_Command_GalvoWobbleSetConfiguration
00000000002f26e0 T Automation1_Command_GearingOff
00000000002fbb60 T Automation1_Command_GearingOn
00000000002d2670 T Automation1_Command_GearingSetLeaderAxis
00000000002f8ec0 T Automation1_Command_GearingSetRatio
00000000002d7d10 T Automation1_Command_Home
00000000002d54c0 T Automation1_Command_HomeAsync
00000000002ed1d0 T Automation1_Command_IfovOff
00000000002ed3c0 T Automation1_Command_IfovOn
00000000002e3b00 T Automation1_Command_IfovSetAxisPairs
00000000002eda30 T Automation1_Command_IfovSetSize
00000000002d4cb0 T Automation1_Command_IfovSetSyncAxes
00000000002eee70 T Automation1_Command_IfovSetTime
00000000002ed7f0 T Automation1_Command_IfovSetTrackingAcceleration
00000000002ed5b0 T Automation1_Command_IfovSetTrackingSpeed
00000000002e57c0 T Automation1_Command_MoveAbsolute
00000000002ea110 T Automation1_Command_MoveCcwByCenter
00000000002e1200 T Automation1_Command_MoveCcwByRadius
00000000002eb3a0 T Automation1_Command_MoveCwByCenter
00000000002e0450 T Automation1_Command_MoveCwByRadius
00000000002d9cc0 T Automation1_Command_MoveDelay
00000000002db5f0 T Automation1_Command_MoveFreerun
00000000002d8d30 T Automation1_Command_MoveFreerunStop
00000000002e7c40 T Automation1_Command_MoveIncremental
00000000002de990 T Automation1_Command_MoveLinear
00000000002f2ec0 T Automation1_Command_MoveOutOfLimit
00000000002df6f0 T Automation1_Command_MovePt
00000000002e8e80 T Automation1_Command_MovePvt
00000000002e6a00 T Automation1_Command_MoveRapid
00000000002f3400 T Automation1_Command_MoveToLimitCcw
00000000002f2c20 T Automation1_Command_MoveToLimitCw
00000000002ec820 T Automation1_Command_NormalcyOff
00000000002eec30 T Automation1_Command_NormalcyOn
00000000002da4b0 T Automation1_Command_NormalcySetAxes
00000000002ee0f0 T Automation1_Command_NormalcySetTolerance
00000000002d64e0 T Automation1_Command_PositionOffsetClear
00000000002dc2e0 T Automation1_Command_PositionOffsetSet
00000000002cfa10 T Automation1_Command_PsoBitmapConfigureArray
00000000002fc1c0 T Automation1_Command_PsoDistanceConfigureAllowedEventDirection
00000000002cfda0 T Automation1_Command_PsoDistanceConfigureArrayDistances
00000000002fc4f0 T Automation1_Command_PsoDistanceConfigureCounterReset
00000000002fd4e0 T Automation1_Command_PsoDistanceConfigureFixedDistance
00000000002d3cf0 T Automation1_Command_PsoDistanceConfigureInputs
00000000002d3540 T Automation1_Command_PsoDistanceConfigureScaling
00000000002f4120 T Automation1_Command_PsoDistanceCounterOff
00000000002f58c0 T Automation1_Command_PsoDistanceCounterOn
00000000002f60a0 T Automation1_Command_PsoDistanceEventsOff
00000000002f5e00 T Automation1_Command_PsoDistanceEventsOn
00000000002ff7f0 T Automation1_Command_PsoEventConfigureMask
00000000002f5b60 T Automation1_Command_PsoEventContinuousOff
00000000002f5380 T Automation1_Command_PsoEventContinuousOn
00000000002f4e40 T Automation1_Command_PsoEventGenerateSingle
00000000002f65e0 T Automation1_Command_PsoLaserEventsOff
00000000002f50e0 T Automation1_Command_PsoLaserEventsOn
00000000002fe4d0 T Automation1_Command_PsoOutputConfigureOutput
00000000002feb30 T Automation1_Command_PsoOutputConfigureSource
00000000002f5620 T Automation1_Command_PsoOutputOff
00000000002f4900 T Automation1_Command_PsoOutputOn
00000000002f2980 T Automation1_Command_PsoReset
00000000002f4ba0 T Automation1_Command_PsoWaveformApplyPulseConfiguration
00000000002f3160 T Automation1_Command_PsoWaveformApplyPwmConfiguration
00000000002f9520 T Automation1_Command_PsoWaveformConfigureDelay
00000000002fde70 T Automation1_Command_PsoWaveformConfigureMode
00000000002d04c0 T Automation1_Command_PsoWaveformConfigurePulseArrayCounts
00000000002d0130 T Automation1_Command_PsoWaveformConfigurePulseArrayOnTimes
00000000002d0850 T Automation1_Command_PsoWaveformConfigurePulseArrayTotalTimes
00000000002ff4c0 T Automation1_Command_PsoWaveformConfigurePulseFixedCount
00000000002f9850 T Automation1_Command_PsoWaveformConfigurePulseFixedOnTime
00000000002f8200 T Automation1_Command_PsoWaveformConfigurePulseFixedTotalTime
00000000002fee60 T Automation1_Command_PsoWaveformConfigurePulseMask
00000000002fd810 T Automation1_Command_PsoWaveformConfigurePulseTruncation
00000000002d1360 T Automation1_Command_PsoWaveformConfigurePwmOnTimes
00000000002f8b90 T Automation1_Command_PsoWaveformConfigurePwmTotalTime
00000000002f7060 T Automation1_Command_PsoWaveformExternalSyncOff
00000000002f6b20 T Automation1_Command_PsoWaveformExternalSyncOn
00000000002f6880 T Automation1_Command_PsoWaveformOff
00000000002f6340 T Automation1_Command_PsoWaveformOn
00000000002e1fb0 T Automation1_Command_PsoWaveformScalingConfigure
00000000002f4660 T Automation1_Command_PsoWaveformScalingOff
00000000002f43c0 T Automation1_Command_PsoWaveformScalingOn
00000000002d0be0 T Automation1_Command_PsoWindowConfigureArrayRanges
0000000000302050 T Automation1_Command_PsoWindowConfigureArrayUpdateDirection
00000000002fc820 T Automation1_Command_PsoWindowConfigureCounterReset
00000000002fcb50 T Automation1_Command_PsoWindowConfigureEvents
00000000002d0fd0 T Automation1_Command_PsoWindowConfigureFixedRange
00000000002d2e10 T Automation1_Command_PsoWindowConfigureInput
0000000000302420 T Automation1_Command_PsoWindowCounterSetValue
00000000002fe1a0 T Automation1_Command_PsoWindowOutputOff
00000000002ffb20 T Automation1_Command_PsoWindowOutputOn
00000000002cf6a0 T Automation1_Command_SafeZoneBoundaryAdd
00000000002fe800 T Automation1_Command_SafeZoneBoundaryRemove
00000000002ef0b0 T Automation1_Command_SafeZoneBoundaryRemoveAll
00000000002efbf0 T Automation1_Command_SafeZoneOff
00000000002ef770 T Automation1_Command_SafeZoneOn
00000000002f1120 T Automation1_Command_SafeZoneSetType
00000000002d1a80 T Automation1_Command_SetupAxisRampType
00000000002d1e50 T Automation1_Command_SetupAxisRampValue
00000000002f91f0 T Automation1_Command_SetupAxisSpeed
00000000002f0350 T Automation1_Command_SetupCoordinatedAccelLimit
0000000000300250 T Automation1_Command_SetupCoordinatedRampType
0000000000300620 T Automation1_Command_SetupCoordinatedRampValue
00000000002edc70 T Automation1_Command_SetupCoordinatedSpeed
00000000002edeb0 T Automation1_Command_SetupDependentCoordinatedAccelLimit
00000000002f0600 T Automation1_Command_SetupDependentCoordinatedRampRate
00000000002ee330 T Automation1_Command_SetupDependentCoordinatedSpeed
00000000002ee9f0 T Automation1_Command_SetupTaskDistanceUnits
00000000002ee7b0 T Automation1_Command_SetupTaskTargetMode
00000000002ef2f0 T Automation1_Command_SetupTaskTimeUnits
00000000002ef530 T Automation1_Command_SetupTaskWaitMode
00000000002f1990 T Automation1_Command_TaskSetError
00000000002f16c0 T Automation1_Command_TaskSetWarning
00000000002ddcb0 T Automation1_Command_TuningSetFeedforwardGains
00000000003009f0 T Automation1_Command_TuningSetMotorAngle
00000000003014f0 T Automation1_Command_TuningSetMotorCurrent
00000000002dcfd0 T Automation1_Command_TuningSetServoLoopGains
00000000002ecfe0 T Automation1_Command_VelocityBlendingOff
00000000002ec630 T Automation1_Command_VelocityBlendingOn
00000000002f7b40 T Automation1_Command_VirtualBinaryInputGet
00000000002f0e50 T Automation1_Command_VirtualBinaryInputSet
00000000002f7880 T Automation1_Command_VirtualBinaryOutputGet
00000000002f13f0 T Automation1_Command_VirtualBinaryOutputSet
00000000002f75c0 T Automation1_Command_VirtualRegisterInputGet
00000000002f08b0 T Automation1_Command_VirtualRegisterInputSet
00000000002f7300 T Automation1_Command_VirtualRegisterOutputGet
00000000002f0b80 T Automation1_Command_VirtualRegisterOutputSet
00000000002d6cf0 T Automation1_Command_WaitForInPosition
00000000002d44a0 T Automation1_Command_WaitForMotionDone
0000000000305260 T Automation1_Connect
00000000003052c0 T Automation1_ConnectWithHost
0000000000304c90 T Automation1_ConnectWithHostAndUser
0000000000305310 T Automation1_ConnectWithUser
0000000000304590 T Automation1_Controller_AvailableAxisCount
00000000003046c0 T Automation1_Controller_AvailableTaskCount
00000000003043f0 T Automation1_Controller_IsRunning
00000000003047f0 T Automation1_Controller_Name
00000000003042c0 T Automation1_Controller_Reset
0000000000304a40 T Automation1_Controller_SerialNumber
0000000000304060 T Automation1_Controller_Start
0000000000304190 T Automation1_Controller_Stop
0000000000305c60 T Automation1_DataCollectionConfig_AddAxisDataSignal
00000000003060a0 T Automation1_DataCollectionConfig_AddSystemDataSignal
0000000000305e80 T Automation1_DataCollectionConfig_AddTaskDataSignal
0000000000306250 T Automation1_DataCollectionConfig_ClearAllDataSignals
0000000000306790 T Automation1_DataCollectionConfig_Create
0000000000305c10 T Automation1_DataCollectionConfig_Destroy
0000000000306980 T Automation1_DataCollection_GetAxisResults
0000000000307a40 T Automation1_DataCollection_GetResults
0000000000306380 T Automation1_DataCollection_GetStatus
0000000000307500 T Automation1_DataCollection_GetSystemResults
0000000000306f40 T Automation1_DataCollection_GetTaskResults
00000000003082a0 T Automation1_DataCollection_Start
00000000003065c0 T Automation1_DataCollection_Stop
0000000000303910 T Automation1_Disconnect
000000000030b710 T Automation1_Files_Delete
000000000030b9e0 T Automation1_Files_GetAllFiles
000000000030b200 T Automation1_Files_ReadBytes
000000000030bf20 T Automation1_Files_WriteBytes
00000000003038e0 T Automation1_GetApiVersion
0000000000308bf0 T Automation1_GetLastError
0000000000308c20 T Automation1_GetLastErrorMessage
00000000003095b0 T Automation1_IsControllerArgumentError
000000000030a790 T Automation1_IsControllerAxisAbortError
000000000030a7a0 T Automation1_IsControllerAxisFaultError
000000000030a7b0 T Automation1_IsControllerCommunicationError
000000000030a860 T Automation1_IsControllerDisconnectedError
0000000000308c80 T Automation1_IsControllerError
000000000030a8e0 T Automation1_IsControllerInternalError
0000000000309990 T Automation1_IsControllerOperationError
000000000030a890 T Automation1_IsControllerStateError
000000000030a8c0 T Automation1_IsControllerStoppedError
000000000030afd0 T Automation1_IsControllerUserError
000000000030cd00 T Automation1_Parameter_GetAxisStringValue
000000000030d080 T Automation1_Parameter_GetAxisValue
000000000030c5d0 T Automation1_Parameter_GetSystemStringValue
000000000030c8d0 T Automation1_Parameter_GetSystemValue
000000000030d5b0 T Automation1_Parameter_GetTaskStringValue
000000000030d930 T Automation1_Parameter_GetTaskValue
000000000030e1b0 T Automation1_Parameter_SetAxisStringValue
000000000030d350 T Automation1_Parameter_SetAxisValue
000000000030ded0 T Automation1_Parameter_SetSystemStringValue
000000000030cb20 T Automation1_Parameter_SetSystemValue
000000000030e510 T Automation1_Parameter_SetTaskStringValue
000000000030dc00 T Automation1_Parameter_SetTaskValue
000000000030ea80 T Automation1_StatusConfig_AddAxisStatusItem
000000000030eec0 T Automation1_StatusConfig_AddSystemStatusItem
000000000030eca0 T Automation1_StatusConfig_AddTaskStatusItem
000000000030f070 T Automation1_StatusConfig_ClearAllStatusItems
000000000030f1a0 T Automation1_StatusConfig_Create
000000000030ea30 T Automation1_StatusConfig_Destroy
000000000030f310 T Automation1_Status_GetAxisResult
00000000003100d0 T Automation1_Status_GetResults
000000000030fc90 T Automation1_Status_GetSystemResult
000000000030f7d0 T Automation1_Status_GetTaskResult
0000000000311770 T Automation1_Task_DebugStepInto
0000000000311cd0 T Automation1_Task_DebugStepOut
0000000000311a20 T Automation1_Task_DebugStepOver
0000000000310bc0 T Automation1_Task_GetStatus
0000000000311f80 T Automation1_Task_ProgramLoad
0000000000311450 T Automation1_Task_ProgramPause
0000000000313370 T Automation1_Task_ProgramRun
0000000000310e80 T Automation1_Task_ProgramStart
0000000000311130 T Automation1_Task_ProgramStop
00000000003148c0 T Automation1_Variables_GetGlobalIntegers
0000000000315440 T Automation1_Variables_GetGlobalReals
0000000000315fc0 T Automation1_Variables_GetGlobalString
0000000000314e30 T Automation1_Variables_SetGlobalIntegers
00000000003159b0 T Automation1_Variables_SetGlobalReals
0000000000316750 T Automation1_Variables_SetGlobalString
====================================linker error========================
```/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/include -I/opt/epics/base-7.0.4/include/compiler/gcc -I/opt/epics/base-7.0.4/include/os/Linux -I/opt/epics/base-7.0.4/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/include -c automation1_registerRecordDeviceDriver.cpp
/usr/bin/g++ -D_GNU_SOURCE -D_DEFAULT_SOURCE -D_X86_64_ -DUNIX -Dlinux -O3 -Wall -mtune=generic -m64 -I. -I../O.Common -I. -I. -I.. -I../../../include/compiler/gcc -I../../../include/os/Linux -I../../../include -I/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/asyn-R4-38/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/seq-2-2-7/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/busy-R1-7-2/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/ipac-2-15/include -I/opt/epics/base-7.0.4/include/compiler/gcc -I/opt/epics/base-7.0.4/include/os/Linux -I/opt/epics/base-7.0.4/include -I/opt/epics/base-7.0.4/../modules/synApps_6_1_epics7/support/include -c ../automation1Main.cpp
/usr/bin/g++ -o automation1 -L/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/asyn-R4-38/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/busy-R1-7-2/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/seq-2-2-7/lib/linux-x86_64 -L/opt/epics/base-7.0.4/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/asyn-R4-38/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/busy-R1-7-2/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/seq-2-2-7/lib/linux-x86_64 -Wl,-rpath,/opt/epics/base-7.0.4/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64 -rdynamic -m64 automation1_registerRecordDeviceDriver.o automation1Main.o -lautomation1compiler -lautomation1c -lAutomation1 -lmotor -lasyn -lbusy -lseq -lpv -ldbRecStd -ldbCore -lca -lCom
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Files_WriteBytes'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Task_ProgramStop'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_HomeAsync'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Execute'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_StatusConfig_Destroy'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_MoveAbsolute'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_Destroy'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_StatusConfig_AddAxisStatusItem'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_GetAxisResults'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Disable'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_MoveFreerun'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_SetupAxisRampValue'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_GetResults'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_ConnectWithHost'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Controller_Start'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_PositionOffsetSet'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Task_ProgramRun'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_ClearAllDataSignals'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_StatusConfig_Create'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Controller_IsRunning'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Enable'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_GetStatus'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Task_GetStatus'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_AddAxisDataSignal'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_Abort'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_Stop'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollectionConfig_Create'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_GetLastError'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_GetLastErrorMessage'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_MoveIncremental'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Status_GetResults'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Disconnect'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Parameter_GetAxisValue'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_Command_AcknowledgeAll'
/usr/bin/ld: /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64/libautomation1compiler.so: undefined reference to `Automation1_DataCollection_Start'
collect2: error: ld returned 1 exit status
make[6]: *** [/opt/epics/base-7.0.4/configure/RULES_BUILD:213: automation1] Error 1
make[6]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64'
make[5]: *** [/opt/epics/base-7.0.4/configure/RULES_ARCHS:58: install.linux-x86_64] Error 2
make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src'
make[4]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: src.install] Error 2
make[4]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App'
make[3]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1App.install] Error 2
make[3]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC'
make[2]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1IOC.install] Error 2
make[2]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs'
make[1]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: iocs.install] Error 2
make[1]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1'
It appears that I've corrupted the Aerotech's *.so files. After reverting everything, the "undefined reference" linker error is gone. But the old error is back.
make[5]: *** No rule to make target '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/db/Automation1MotorController.template', needed by '../../../db/Automation1MotorController.template'. Stop
======================================================================================
Installing created executable ../../../bin/linux-x86_64-debug/automation1
make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64-debug'
make[4]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/src'
make -C ./Db install
make[4]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/Db'
perl -CSD /opt/epics/base-7.0.4/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../../..
perl -CSD /opt/epics/base-7.0.4/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64-debug ../../..
mkdir -p O.Common
make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \
T_A=linux-x86_64 install
make[5]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/Db/O.linux-x86_64'
make[5]: *** No rule to make target '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/db/Automation1MotorController.template', needed by '../../../db/Automation1MotorController.template'. Stop.
make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/Db/O.linux-x86_64'
make[4]: *** [/opt/epics/base-7.0.4/configure/RULES_ARCHS:58: install.linux-x86_64] Error 2
make[4]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/Db'
make[3]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: Db.install] Error 2
make[3]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App'
make[2]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1App.install] Error 2
make[2]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC'
make[1]: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1IOC.install] Error 2
make[1]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs'
make: *** [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: iocs.install] Error 2
@LeeYangLBLBCS, motorAutomation1 is being built inside motor-R7-2-1, but that version of motor doesn't include motorAutomation1 as a submodule, so the problem is likely due to the fact that motorAutomation1 is missing from the motor/modules/Makefile:
https://github.com/epics-modules/motor/blob/master/modules/Makefile
motorAutomation1 should build without errors outside of the motor module.
@LeeYangLBLBCS Have you defined the path to motorAutomation1 in RELEASE.local? I experienced a similar compiler error that was resolved by adding
MOTOR_AUTOMATION1 = <path to motorAutomation1>
to RELEASE.local (in my case, RELEASE.linux-x86_64.local located in the modules folder).
It should only be necessary to manually define MOTOR_AUTOMATION1
when motorAutomation1 is being built outside the motor module.
To build inside MOTOR, I added an extra line to the Makefile you mentioned: ...... SUBMODULES += motorAutomation1
Tto build outside the MOTOR, I added MOTOR_AUTOMATION1=/opt/epics/modules/motorAutomation1 to /opt/epics/modules/motorAutomation1/configure/RELEASE
In both attempt, the error is about the missing file libautomation1compiler.a. Aerotech tech provided libautomation1compiler.so, but not libautomation1compiler.a. Does EPICS build facility automatically generate ".a" based on ".so"?
make[5]: *** No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'automation1'. Stop.
make[5]: Entering directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64'
/usr/bin/g++ -o automation1 -L/opt/epics/modules/motorAutomation1/iocs/automation1IOC/lib/linux-x86_64 -L/opt/epics/base-7.0.4/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/asyn-R4-38/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/busy-R1-7-2/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64 -L/opt/epics/modules/synApps_6_1_epics7/support/seq-2-2-7/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/motorAutomation1/iocs/automation1IOC/lib/linux-x86_64 -Wl,-rpath,/opt/epics/base-7.0.4/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/asyn-R4-38/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/busy-R1-7-2/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/lib/linux-x86_64 -Wl,-rpath,/opt/epics/modules/synApps_6_1_epics7/support/seq-2-2-7/lib/linux-x86_64 -rdynamic -m64 automation1_registerRecordDeviceDriver.o automation1Main.o -lautomation1compiler -lautomation1c -lAutomation1 -lmotor -lasyn -lbusy -lseq -lpv -ldbRecStd -ldbCore -lca -lCom
Installing created executable ../../../bin/linux-x86_64/automation1
make[5]: Leaving directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64'
make -C O.linux-x86_64-debug -f ../Makefile TOP=../../.. \
T_A=linux-x86_64-debug install
make[5]: Entering directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64-debug'
make[5]: No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'automation1'. Stop.
make[5]: Leaving directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC/automation1App/src/O.linux-x86_64-debug'
make[4]: [/opt/epics/base-7.0.4/configure/RULES_ARCHS:58: install.linux-x86_64-debug] Error 2
make[4]: Leaving directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC/automation1App/src'
make[3]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: src.install] Error 2
make[3]: Leaving directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC/automation1App'
make[2]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1App.install] Error 2
make[2]: Leaving directory '/opt/epics/modules/motorAutomation1/iocs/automation1IOC'
make[1]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1IOC.install] Error 2
make[1]: Leaving directory '/opt/epics/modules/motorAutomation1/iocs'
make: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: iocs.install] Error 2
In both attempt, the error is about the missing file libautomation1compiler.a. Aerotech tech provided libautomation1compiler.so, but not libautomation1compiler.a. Does EPICS build facility automatically generate ".a" based on ".so"?
The build does not generate a .a file based on the .so:
[hostname ~/development/epics-motor/motorAutomation1]$ find . -name "automation1" | grep -i lib ./automation1Sup/Lib/libautomation1c.so ./automation1Sup/Lib/libautomation1compiler.so ./bin/rhel8-x86_64-debug/libautomation1compiler.so ./bin/rhel8-x86_64-debug/libautomation1c.so ./bin/rhel8-x86_64/libautomation1compiler.so ./bin/rhel8-x86_64/libautomation1c.so
make[5]: *** No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'automation1'. Stop.
This error occurs when MOTOR_AUTOMATION1
is undefined. Can you share the RELEASE and RELEASE.local files from the standalone motorAutomation1 directory?
The error message about .a is misleading, it really means it could not find either the .so or the .a file. It simply can't find the required library.
Here are the two files, RELEASE and RELEASE.local. I have to add ".txt" to them so Github would take them. The standalone build is located at a directory: /opt/epics/modules/motorAutomation1
The MOTOR_AUTOMATION1
definition needs to appear in the RELEASE.local file, not the RELEASE file, because that is where the example IOC expects to find it:
Thanks! The standalone compile worked.
Should it work for the build inside the MOTOR? (I've already added SUBMODULES += motorAutomation1 to the Makefile).
I'm getting a different error when I try it inside the MOTOR: make[7]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/iocs/automation1IOC/automation1App/Db/O.linux-x86_64' make[7]: *** No rule to make target '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/db/Automation1MotorController.template', needed by '../../../db/Automation1MotorController.template'. Stop.
When motorAutomation1 is built as a submodule of motor the build process installs the libraries and databases of the submodules to motor's top-level directory. The submodule build of motorAutomation1 is failing because MOTOR_AUTOMATION1
is defined in one of the motor modules's RELEASE files, which is causing the rules in this Makefile to look for the template files in the wrong directory:
Removing the MOTOR_AUTOMATION1
definition from the motor RELEASE files should eliminate the build error.
removing "MOTOR_AUTOMATION1" definition put me back to the original error: make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \ T_A=linux-x86_64 install make[5]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src/O.linux-x86_64' make[5]: *** No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'libAutomation1.a'. Stop.
Do you get the same error if you first do a 'make distclean' in the top of the motor module?
Correct. I just did it again to confirm. under /opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1: make distclean make Looks like MOTOR_AUTOMATION1 is needed to link libautomation1compiler.so but not for db template? ==================output========================= make[4]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src' make -C O.linux-x86_64 -f ../Makefile TOP=../../.. \ T_A=linux-x86_64 install make[5]: Entering directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src/O.linux-x86_64' make[5]: No rule to make target '/automation1Sup/Lib/libautomation1compiler.a', needed by 'libAutomation1.a'. Stop. make[5]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src/O.linux-x86_64' make[4]: [/opt/epics/base-7.0.4/configure/RULES_ARCHS:58: install.linux-x86_64] Error 2 make[4]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App/src' make[3]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: src.install] Error 2 make[3]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1/automation1App' make[2]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: automation1App.install] Error 2 make[2]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules/motorAutomation1' make[1]: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: motorAutomation1.install] Error 2 make[1]: Leaving directory '/opt/epics/modules/synApps_6_1_epics7/support/motor-R7-2-1/modules' make: [/opt/epics/base-7.0.4/configure/RULES_DIRS:85: modules.install] Error 2
I'm able to reproduce the problem.
@LeeYangLBLBCS, I pushed what I believe is a fix to the issue12 branch:
https://github.com/epics-motor/motorAutomation1/tree/issue12
Please test that branch or manually apply these changes and let me know if they resolve the build problem:
https://github.com/epics-motor/motorAutomation1/commit/77b37c7dcef72c3997661c2cb5bf3726a8b36134
It worked. I found a minor problem, that might be good to be included in this issue when merged back to main. The Makefile missed an "included" statement that caused the compile to fail. I have always been adding it manually every time.
motorAutomation1/automation1Sup/Makefile: Makefile.txt
INC += Include/Automation1Variables.h
@LeeYangLBLBCS, there is a separate issue for how to deal with the include files required for different versions of the Automation1 C API:
@LeeYangLBLBCS, this branch should eliminate the need to modify the automation1Sup/Makefile:
https://github.com/epics-motor/motorAutomation1/tree/issue13
I tested the change in issue13 (manually made the change to the Makefile). It worked correctly.
On Tue, Feb 22, 2022 at 12:59 PM Kevin Peterson @.***> wrote:
@LeeYangLBLBCS https://github.com/LeeYangLBLBCS, this branch should eliminate the need to modify the automation1Sup/Makefile:
https://github.com/epics-motor/motorAutomation1/tree/issue13
— Reply to this email directly, view it on GitHub https://github.com/epics-motor/motorAutomation1/issues/12#issuecomment-1048206265, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADSYGNDEX4F57PCAVC3LHGDU4P2LHANCNFSM5OHBU5NA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID: @.***>
-- Lee Yang Lawrence Berkeley National Lab 1 Cyclotron Road, M/S 46R0161 Berkeley, California 97320 office:(510)486-7320 fax:(510) 486-4633
I can only find Windows Dot.Net API from Aerotech's website. Where can I find the Automation1 Linux C API required to compile this driver?