C ++ undefined link when binding

I am wondering if anyone can help me because I have been combing my head for two days.

I did the compilation and when trying to link the source code with linux, I got an undefined link

Compiling Using

g ++ -g -I / u01 / kasunt / workspace / corelibCORBA / enable -I / u01 / kasunt / workspace / corelibCORBA / installed_components / enable -I / u01 / kasunt / workspace / corelibCORBA / IDL -I / u01 / kasunt / workspace / corelibCORBA / SRC / Server -I / u01 / kasunt / workspace / corelibCORBA / installed _components / IDL -I / u01 / kasunt / workspace / corelibCORBA / installed _components / SRC / Server -I / u01 / kasunt / workspace / corelibCORBA / installed _components / Imake -DANARROPROPRO-I.-I / u01 / kasunt / workspace / corelibCORBA / installed_components / enable -W -Wall -Wpointer-arith -pipe -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -g -O -I / u01 / kasunt / workspace / corelibCORBA / include I / u01 / kasunt / workspace / corelibCORBA / include -fvisibility = hidden -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS = 1 -W -Wall -Wpointer-arith -ggdb -pipe -Wall -g -D__lin_rd_nd____rd__ DTAO_HAS_INTERCEPTORS = 0 -DTAO_HAS_VALUETYPE = 1 -D_REENTRANT -DACE_HAS_AIO_CALLS -D_GNU_SOURCE -I / usr / local / ACE + TAO + CIAO -5.7.9 / ACE_wrappers -I / USEE-5 / local + ACE-5.7 TAO -I / USR / local / ACE + TAO + CIAO-5.7.9 / ACE_wrappers / TAO / orbsvcs -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -c -o TestSeqWrapper.o TestSeqWrapper.cppcppcpp

,

g++ -o TestSeqWrapper TestSeqWrapper.o -g -L/u01/kasunt/workspace/corelibCORBA/lib -L/u01/kasunt/ /corelibCORBA/installed_components/ -g -O -Wl, -E -L/usr/local/ACE + TAO + CIAO-5.7.9/ACE_wrappers/lib -L/USR//ACE + + CIAO-5.7.9/ACE_wrappers/ -L/USR//ACE + + CIAO-5.7.9/ACE_wrappers//Tao -L/u01/kasunt/ /corelibCORBA/installed _components/IDL -lcorelibCORBA -lcorelibCORBA/u01/kasunt/workspace/corelibCORBA/installed_components/lib/corelibCORBA3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/CorbaController3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/EConcurrency3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/corelibLogger3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/LeakTracker3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/trace3r.lib -lDefineTimeZone/u01/kasunt/workspace/corelibCORBA/installed_components/lib/timestamp3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/ApplConfig3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/appl3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/logstream3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/disklog3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/timeout3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/getpnam3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/config3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/strl3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/string3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/command3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/cmdargs3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/CppUtils3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/BuildTag3r.lib /u 01/kasunt/workspace/corelibCORBA/installed_components/lib/exception3r.lib -lCorbaIdl -lTAO_Valuetype -lTAO_PortableServer -lTAO_IORTable -lTAO_AnyTypeCode -lTAO_CosEvent -lTAO_CosNaming -lTAO -lACE

TestSeqWrapper.o: In function `SeqWrapper':
/u01/kasunt/workspace/corelibCORBA/include/corelibCORBA/SeqWrapper.hpp:165: undefined reference to `ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T()'

nm , , ,

nm --demangle ../installed_components/lib/libCorbaIdl.so | grep "ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T"
000327ba t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T(ECONZ::Corba::ComboElementSeq_T const&)
000331c2 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T(unsigned int)
0002edb0 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T(unsigned int, unsigned int, ECONZ::Corba::ComboElement_T*, bool)
0002d768 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T()
00032e52 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T(ECONZ::Corba::ComboElementSeq_T const&)
0003172a t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T(unsigned int)
0002d8e0 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T(unsigned int, unsigned int, ECONZ::Corba::ComboElement_T*, bool)
0002d8a6 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T()

( 165), SeqWrapper(): var_ (new SequenceType), size_ (0) {}

,

template< typename SEQUENCE >
class SeqWrapper : CppUtils::NonCopy
{
public:
   typedef SEQUENCE SequenceType;
   typedef typename SequenceType::_var_type SequenceType_var;

   typedef typename ElementTypeOf<SequenceType_var>::ElementType ElementType;
   typedef typename ElementTypeOf<SequenceType_var>::ReturnType ReturnType;
   typedef typename ElementTypeOf<SequenceType_var>::ConstReturnType ConstReturnType;

private:
   SequenceType_var var_;
   CORBA::ULong size_;

  void expand_( CORBA::ULong size )
  {
     // NOTE: current implementation assumes size only increases by small increments
     if (size > var_->length()) {
        var_->length( (size < 16)? 16 : (size > 256? size+256 : 2*size-2) );
     }
  }

public:
   SeqWrapper() : var_( new SequenceType ), size_( 0 ) { }
   SeqWrapper( CORBA::ULong reserve ) : var_( new SequenceType( reserve ) ), size_( 0 ) { var_->length( reserve ); }
   SeqWrapper( SequenceType *ownSeq ) : var_( ownSeq ), size_( ownSeq->length() ) { }

.....

TestSeqWrapper.cpp( , )

#include <iostream>
#include <CppUtils/StringHelpers.hpp>
#include <corelibCORBA/SeqWrapper.hpp>
#include <CorbaC.h>

using namespace std;

int main()
{
    ECONZ::Corba::SeqWrapper< ECONZ::Corba::StringSeq_T > seq;
}

, ( ). , - , .

.

+3
4

,

10 . , -, - , . .

-D, , . , "ECONZ:: Corba:: ComboElementSeq_T:: ComboElementSeq_T" .

nm -DC ../installed_components/lib/libCorbaIdl.so | grep "ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T"

lib. "-fvisibility = hidden -fvisibility-inlines-hidden". ACE/TAO, , GCC 4. . , , , - , , ?

, , http://gcc.gnu.org/wiki/Visibility

+1

nm --demangle ../installed_components/lib/libCorbaIdl.so
> 0002d768 t ECONZ::Corba::ComboElementSeq_T::ComboElementSeq_T()

, ComboElementSeq_T() lib -lCorbaIdl
, , :

> -lCorbaIdl -lTAO_Valuetype -lTAO_PortableServer -lTAO_IORTable
> -lTAO_AnyTypeCode -lTAO_CosEvent -lTAO_CosNaming -lTAO -lACE

, : TestSeqWrapper.o: In function SeqWrapper'`

  • -lTAO_Valuetype
  • -lTAO_PortableServer
  • -lTAO_IORTable
  • -lTAO_AnyTypeCode
  • -lTAO_CosEvent
  • -lTAO_CosNaming
  • -lTAO
  • -lACE

: GCC ++: Undefined "vtable XXX" , Undefined "ClassName:: ClassName()"

, .

+1

?

-L/u01/kasunt/workspace/corelibCORBA/idl

-L/u01/kasunt/workspace/corelibCORBA/lib
0

, -, , , .

/u01/kasunt/workspace/corelibCORBA/installed_components/lib/libCorbaIdl.a

and it worked perfectly. Anyone who can explain this?

0
source

Source: https://habr.com/ru/post/1761249/