It is possible for most recent compiler versions to test for the
presence of a library header file, and we use this in the next Base
release to autodetect the GNU Readline setting to use by asking the
C pre-processor to look for the header file, and define a
build-system setting indicating how to configure this target (the
user can override that if they want though). See here
for the C file we use.
The Asyn module could do this for the RPC library, and should also
publish one or more files in its cfg/ install directory telling
downstream modules what libraries the IOCs that use it should be
linked with (which may be different for each target architecture
since that depends on the whether the target uses sunrpc or tirpc) —
it's a pain to have to configure downstream modules and IOCs for the
TIRPC setting as well as Asyn itself, and this avoids having to do
that.
- Andrew
On 8/31/22 6:06 PM, Siddons, David via
Tech-talk wrote:
Hi Yong,
Yes, but this wonderful EPICS community always comes through
with the solution in record time
🙂
Pete.
Hi Pete, this happened to many people, including me. I guess
this will continue trip other people. See this report:
https://github.com/epics-modules/asyn/issues/95.
It would be nice if this kind of compile error could be
fixed in future asyn release.
Cheers,
Yong
You can
uncomment this line in CONFIG_SITE of asyn:
Then the
compiler should be able to look for this file in
/usr/include/tirpc/.
I am
provisioning a new machine (Ubuntu 22.04), and have
installed and built base-3.15.9. I'm now installing
synApps, and the build failed when building asyn, see
below:
make[3]:
Entering directory
'/home/peter/epics/synApps/support/asyn-R4-42/asyn/O.linux-x86_64'
/usr/bin/gcc
-D_GNU_SOURCE -D_DEFAULT_SOURCE
-DUSE_TYPED_RSET -DUSE_TYPED_DSET -DUSE_TYPED_DRVET
-DBUILDING_asyn_API -D_X86_64_ -DUNIX -Dlinux
-O3 -Wall -DUSE_TYPED_RSET -DUSE_TYPED_DSET
-DUSE_TYPED_DRVET -DHAVE_LSREC -mtune=generic
-m64 -fPIC -I. -I../O.Common -I. -I.
-I../../asyn/drvAsynSerial/os/Linux
-I../../asyn/drvAsynSerial/os/default -I..
-I../../asyn/asynDriver -I../../asyn/asynGpib
-I../../asyn/drvAsynSerial -I../../asyn/interfaces
-I../../asyn/miscellaneous
-I../../asyn/asynPortDriver/exceptions
-I../../asyn/asynPortDriver
-I../../asyn/asynPortClient -I../../asyn/devEpics
-I../../asyn/asynRecord -I../../asyn/vxi11
-I../../asyn/drvPrologixGPIB -I../../asyn/gsIP488
-I../../asyn/ni1014 -I../../asyn/devGpib
-I../../include/compiler/gcc
-I../../include/os/Linux -I../../include
-I/home/peter/epics/synApps/support/ipac-2-16/include
-I/home/peter/epics/synApps/support/seq-2-2-9/include
-I/home/peter/epics/base-3.15.9/include/compiler/gcc
-I/home/peter/epics/base-3.15.9/include/os/Linux
-I/home/peter/epics/base-3.15.9/include -c
vxi11core_xdr.c
In file
included from vxi11core_xdr.c:6:
vxi11core.h:9:10:
fatal error: rpc/rpc.h: No such file or directory
The file
/usr/include/rpc/rpc.h does not exist. There is a file
/usr/include/tirpc/rpc/rpc.h. Should I simply copy the
files into /usr/include? Or edit the offending source
files to point to these new locations?
--
Complexity comes for free, Simplicity you have to work for.
|