1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 <2023> 2024 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 <2023> 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: Why does libca.so depend on libreadline.so? |
From: | "Dmitry Yu. Bolkhovityanov via Tech-talk" <tech-talk at aps.anl.gov> |
To: | Han Lee <jeonglee at lbl.gov> |
Cc: | tech-talk at aps.anl.gov |
Date: | Wed, 10 May 2023 15:06:03 +0700 (+07) |
Hi! On Mon, 8 May 2023, Han Lee wrote:
Hi Dmitry, I think the head file (especially comments in the file) may be what you are interested in to get your understanding. https://github.com/epics-base/epics-base/blob/7.0/modules/libcom/src/osi/epicsReadline.h
Well, this documents the epicsReadline library, but doesn't explain why it is required for libCom.
From my naive understanding, it is required for an iocsh functionality.
Thanks! The "iocsh" is the keyword.When googling for "libca.so readline site:anl.gov" I finally encountered a message "Re: Problem installing PyEpics" (https://epics.anl.gov/tech-talk/2017/msg00206.php) from Andrew Johnson, 30 Jan 2017, with a short phrase
The core of iocsh is a part of libCom. Yes, this explains it all.Albeit the design looks extremely surprising -- as if some IP implementation included an integrated ksh...
However, a brief investigation had found this had changed in the 7.0.x between 7.0.2 and 7.0.7: in 7.0.2 the libca.so.4.13.3 does have a dependency on libreadline, while 7.0.7's libca.so.4.14.2 does NOT.
So, if 7.0.x was refactored to get rid of this dependency, then this change can probably be back-ported to 3.15.x. A quick inspection of https://epics.anl.gov/base/R7-0/7-docs/RELEASE_NOTES.html doesn't show any traces of this change; probably a "diff -Naur" between sources is required. I'm not sure my skills are sufficient for this back-porting, but I'll try.
With best regards, Dmitry
On Mon, May 8, 2023 at 9:46?PM Dmitry Yu. Bolkhovityanov via Tech-talk < tech-talk at aps.anl.gov> wrote:Michael, On Sun, 7 May 2023, Michael Davidsaver wrote:On 5/6/23 23:12, Dmitry Yu. Bolkhovityanov via Tech-talk wrote:P.S. Yes, I'm aware of a "COMMANDLINE_LIBRARY=EPICS" flag (which tooksometime to figure out :D), but the question remains -- why any commandline editing is needed for network communication libraries at all?This is a side-effect of the convention we use to support both dynamicandstatic linking with one configuration. Since static libraries do not carry dependency information, when linking statically it is necessary to give a complete list of alldependentlibraries when linking any executable. This includes libreadline when libComdependson it. One simple way to avoid this over-linking in the dynamic case by passing "-Wl,--as-needed" when linking. (assumes GCC or clang on an ELF target)Thanks for this -- I didn't know of this linker option! However, I still don't understand: why libCom depends on libreadline (or any commandline-editing library)? With best regards, Dmitry