2013-12-13 12 views
0

Я использую OpenDDS 3.4.1 в Linux и пытаюсь вручную скомпилировать IDL, потому что у меня уже есть система сборки для проекта и просто хотел бы сгенерировать необходимые файлы и интегрировать их. Здесь тестовый IDL, который я использую.Почему IDL неполна?

#include "orbsvcs/TimeBase.idl" 

module StockQuoter { 
#pragma DCPS_DATA_TYPE "StockQuoter::Quote" 
#pragma DCPS_DATA_KEY "StockQuoter::Quote ticker" 

    struct Quote { 
     string ticker; 
     string exchange; 
     string full_name; 
     double value; 
     TimeBase::TimeT timestamp; 
    }; 
}; 

Затем скомпилировать IDL следующим образом:

$ opendds_idl ./StockQuoter.idl 
processing ./StockQuoter.idl 

$ tao_idl -I$DDS_ROOT/DDS -I$TAO_ROOT/orbsvcs ./StockQuoter.idl 
processing ./StockQuoter.idl 

Но как только я получаю с помощью tao_idl на сгенерированном IDL, я получаю следующее:

$tao_idl -I$DDS_ROOT/DDS -I$TAO_ROOT/orbsvcs ./StockQuoterTypeSupport.idl 

.../ACE_wrappers/bin/tao_idl: "./StockQuoterTypeSupport.idl", line 21: module must contain at least one declaration: ::StockQuoter 
.../ACE_wrappers/bin/tao_idl: "./StockQuoterTypeSupport.idl", line 21: module must contain at least one declaration: ::StockQuoter 
.../ACE_wrappers/bin/tao_idl: "./StockQuoterTypeSupport.idl", line 21: module must contain at least one declaration: ::StockQuoter 
.../ACE_wrappers/bin/tao_idl: "./StockQuoterTypeSupport.idl", line 21: module must contain at least one declaration: ::StockQuoter 

Конечно, результат означает, Я не могу зарегистрировать поддержку типа в моем пабе/подмассовом узле, потому что нужных объектов не хватает, что я могу подтвердить, посмотрев файл StockQuoterTypeSupport.idl. Я рассмотрел главу 8 руководства по OpenDDS для параметров opendds_idl, но ничего не работало. Есть идеи?

Редактировать:
Вот генерируемый IDL StockQuoterTypeSupport.idl.

/* Generated by .../DDS/bin/opendds_idl version 3.4.1 (ACE version 5.6a_p14) 
    running on input file ./StockQuoter.idl*/ 
#ifndef OPENDDS_IDL_GENERATED_STOCKQUOTERTYPESUPPORT_IDL_X54N2R 
#define OPENDDS_IDL_GENERATED_STOCKQUOTERTYPESUPPORT_IDL_X54N2R 
#include "./StockQuoter.idl" 

#include "dds/DdsDcpsInfrastructure.idl" 
#include "dds/DdsDcpsPublication.idl" 
#include "dds/DdsDcpsSubscriptionExt.idl" 
#include "dds/DdsDcpsTopic.idl" 
#include "dds/DdsDcpsTypeSupportExt.idl" 

/* Begin MODULE: StockQuoter */ 

/* Begin STRUCT: Quote */ 

module StockQuoter { 
}; 

/* End STRUCT: Quote */ 

/* End MODULE: StockQuoter */ 
#endif /* OPENDDS_IDL_GENERATED_STOCKQUOTERTYPESUPPORT_IDL_X54N2R */ 
+0

Что генерируется в StockQuoterTypeSupport.idl, оно должно содержать интерфейсы QuoteTypeSupport, QuoteDataWriter и QuoteDataReader. –

+0

Это те объекты, которые мне нужны, но по какой-то причине они не появляются. Я отправил сформированный IDL. Я также запускал его в подробном режиме и не видел ничего необычного. – Ender

+1

Похоже, что существует проблема с компилятором opendds_idl. Можете ли вы попытаться перекомпилировать OpenDDS с помощью ACE/TAO x.2.3, которую вы можете получить по адресу http://download.dre.vanderbilt.edu/. У меня есть эта комбинация в моей системе, и это работает без проблем. –

ответ

2

Похоже, что существует проблема с компилятором opendds_idl. Можете ли вы попытаться перекомпилировать OpenDDS, используя ACE/TAO x.2.3, которую вы можете получить из download.dre.vanderbilt.edu. У меня есть эта комбинация в моей системе, и это работает без проблем.

+0

Это должно быть разрешено с помощью выпуска OpenDDS 3.5 –