Мне интересно, сможет ли кто-нибудь мне помочь, так как я два дня чесал голову по этому поводу.
Я выполнил компиляцию, и при попытке связать исходный код Linux получилось неопределенная ссылка
Компиляция с использованием,
г ++ -г
-I / u01 / kasunt / рабочее пространство / corelibCORBA / включить
-I / u01 / kasunt / рабочее пространство / corelibCORBA / installed_components / включить
-I / u01 / kasunt / рабочее пространство / corelibCORBA / IDL
-I / u01 / kasunt / рабочее пространство / corelibCORBA / SRC / Server
-I / u01 / kasunt / рабочее пространство / corelibCORBA / installed_components / IDL
-I / u01 / kasunt / рабочее пространство / corelibCORBA / installed_components / SRC / Server
-I / u01 / kasunt / рабочее пространство / corelibCORBA / installed_components / Imake
-DNARROWPROTO -I. -I / u01 / kasunt / рабочее пространство / corelibCORBA / installed_components / включить
-W -Wall -Wpointer-arith -pipe -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -g -O -I / u01 / kasunt / рабочее пространство / corelibCORBA / include
-g -O -I / u01 / kasunt / рабочая область / corelibCORBA / include
-fvisibility = скрытый -fvisibility-inlines-hidden -DACE_GCC_HAS_TEMPLATE_INSTANTIATION_VISIBILITY_ATTRS = 1
-W -Wall -Wpointer-arith -ggdb -pipe -Wall -g -D__linux__ -D__x86__ -rdynamic -D_REENTRANT -DTAO_HAS_INTERCEPTORS = 0 -DTAO_HAS_VALUETYPE = 1 -D_REENTRANT -DACE_HAS_SO / США / TI-ACE-CAE-TOG -5.7.9 / ACE_wrappers
-I / USR / местные / ACE + ТАО + CIAO-5.7.9 / ACE_wrappers / ТАО
-I / USR / местные / ACE + TAO + CIAO-5.7.9 / ACE_wrappers / TAO / orbsvcs
-DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -c -o TestSeqWrapper.o TestSeqWrapper.cpp
Использование ссылок,
g ++ -o TestSeqWrapper TestSeqWrapper.o
-g -L / u01 / kasunt / рабочая область / 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
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/CorbaController3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/EConcurrency3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/corelibLogger3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/LeakTracker3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/trace3r.lib
-lDefineTimeZone /u01/kasunt/workspace/corelibCORBA/installed_components/lib/timestamp3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/ApplConfig3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/appl3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/logstream3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/disklog3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/timeout3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/getpnam3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/config3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/strl3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/string3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/command3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/cmdargs3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/CppUtils3r.lib
/u01/kasunt/workspace/corelibCORBA/installed_components/lib/BuildTag3r.lib
/u01/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 --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;
}
И вы можете видеть, что я указал общую библиотеку в параметрах ссылки (выделено жирным шрифтом). Сначала я подумал, что это может быть из-за какой-то зависимости, и переместил флаг библиотеки в начало, чтобы это никак не отразилось.
Я ценю это.