[ace-bugs] ACE_Service_Gestalt::process_directive fails when loaded .so has unresolved symbols

Johnny Willemsen jwillemsen at remedy.nl
Tue Oct 2 01:42:23 CDT 2018


Hi,

Thansk for using the PRF form. You have to fix the unresolved symbol
before the DLL can be loaded by ACE.

Johnny Willemsen
Remedy IT
Postbus 81 | 6930 AB Westervoort | The Netherlands
http://www.remedy.nl

On 9/29/18 7:16 AM, Danny Wilson wrote:
> 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 
>
>
> _______________________________________________
> ace-bugs mailing list
> ace-bugs at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/cgi-bin/mailman/listinfo/ace-bugs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.isis.vanderbilt.edu/pipermail/ace-bugs/attachments/20181002/c900f180/attachment-0001.html>


More information about the ace-bugs mailing list