[ace-bugs] ACE_Service_Gestalt::process_directive fails when loaded .so has unresolved symbols
Danny Wilson
danny at torquevideo.tv
Sat Sep 29 00:16:46 CDT 2018
We're porting old code to ACE 6.4.8. process_directive() fails if the library being loaded has unresolved symbols.
Specifically, we load 'lib/libecpav.so', which contains references to symbols in 'lib/libecptesting.so'.
The transcript and PRF is below.
Thanks!
12:26:34.376354 - process_directive(dynamic ecp_av_module Service_Object * ecpav:_make_EcpAVFeederModule() " ")
ACE (13903|3069991760) SG::process_directive, repo=0xa036420 - dynamic ecp_av_module Service_Object * ecpav:_make_EcpAVFeederModule() " "
ACE (13903|3069991760) SG::process_directives_i, repo=0xa036420 - dynamic ecp_av_module Service_Object * ecpav:_make_EcpAVFeederModule() " "
ACE (13903|3069991760) - SCG:<ctor=0xbfcf3118> - config=0xa0363f0 repo=0xa036420 superseded by repo=0xa036420
ACE (13903|3069991760) SG::initialize - repo=0xa036420, name=ecp_av_module - looking up in the repo
ACE (13903|3069991760) STDG::<ctor>, repo=0xa036420, name=ecp_av_module - beginning at [0]
ACE (13903|3069991760) LN::open_dll - path=ecpav
ACE (13903|3069991760) DLL_Handle::open ("libecpav.so", 0x101) -> failed: /usr/local/ecp/lib/libecpav.so: undefined symbol: _ZTI19EcpTclTestingModule
ACE (13903|3069991760) DLL_Handle::open ("ecpav.so", 0x101) -> failed: ecpav.so: cannot open shared object file: No such file or directory
ACE (13903|3069991760) DLL_Handle::open ("ecpav", 0x101) -> failed: ecpav: cannot open shared object file: No such file or directory
ACE (13903|3069991760) DLL_Handle::open ("ecpav"): Invalid handle error: no error
ACE (13903|3069991760) DLL_Manager::open_dll: Could not open dll ecpav.
ACE (13903|3069991760) DLL_Handle::close - ecpav (handle=0, refcount=0)
ACE (13903|3069991760) LN::open_dll - Failed to open ecpav: no error
ACE VERSION: 6.4.8
HOST MACHINE and OPERATING SYSTEM: 32-bit Centos 6.6 4.4.127-1.el6.elrepo.i686
COMPILER NAME AND VERSION (AND PATCHLEVEL): c++4.9 (GCC) 4.9.4
THE $ACE_ROOT/ace/config.h FILE:
#include "config-linux.h"
// For debugging
#define ACE_HAS_DUMP
#define ACE_HAS_REACTOR_NOTIFICATION_QUEUE
#define ACE_REACTOR_NOTIFICATION_ARRAY_SIZE 1024
THE $ACE_ROOT/include/makeinclude/platform_macros.GNU FILE
exceptions=1
inline=1
optimize=1
shared_libs_only=1
ifndef debug
debug=0
endif
threads=1
TAO_ORBSVCS = Naming
include $(ACE_ROOT)/include/makeinclude/platform_linux.GNU
# Use -mno-avx so Valgrind works. DW
CCFLAGS := $(strip $(subst -fno-implicit-templates,,$(CCFLAGS))) -fdiagnostics-color=auto -mno-avx -mno-sse4.1 -mno-sse4.2 -mno-sse4 -mno-sse4a -mno-sse2avx
OCCFLAGS += -O3 -march=pentium4
CONTENTS OF $ACE_ROOT/bin/MakeProjectCreator/config/default.features
[no such file present]
AREA/CLASS/EXAMPLE AFFECTED: Service process_directive()
DOES THE PROBLEM AFFECT: EXECUTION
SYNOPSIS:
Cannot load service string using ACE_Service_Gestalt::process_directive() when the library contains unresolved references.
DESCRIPTION:
Class "EcpAVFeederModule" is a dynamic service and has "ACE_FACTORY_DEFINE(ACE_Local_Service, EcpAVFeederModule)" at the end of its .cpp file. There is no ACE_XX macro in the header file. The class is NOT enclosed in any namespace.
The class is compiled into shared library libecpav.so. EcpAVFeederModule makes calls to functions defined in another library, libecptesting.so.
We pass, to process_directive, the following description string:
dynamic ecp_av_module Service_Object * ecpav:_make_EcpAVFeederModule() " "
process_directive() appears to fail because DLL_Handle::open() fails opening libecpav due to unresolved symbols:
ACE (13903|3069991760) DLL_Handle::open ("libecpav.so", 0x101) -> failed: /usr/local/ecp/lib/libecpav.so: undefined symbol: _ZTI19EcpTclTestingModule
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.isis.vanderbilt.edu/pipermail/ace-bugs/attachments/20180929/67f1db7a/attachment-0001.html>
More information about the ace-bugs
mailing list