ライブラリの競合について

2 個の投稿 / 0 new
最終投稿
take
オフライン
Last seen: 6年 1ヶ月 前
登録日: 2018-03-20 17:29
ライブラリの競合について

こんにちは 私は大学でOpenRTMを利用して、開発を行っています。

RTC作成時にライブラリの競合が起こり、困っています。 使用しているライブラリはMobileRobotics社のAriaライブラリ(32bit)を使用しています。 サイトで公開されているRTCで、同じようにAriaライブラリを使用したコンポーネントがあったので、解決方法があるとは思うのですが 自分で見つけることが出来なかったので、助言をいただけるとありがたいです。

以下はヘッダー部分のコピーと開発環境になります。よろしくお願いします。

ヘッダー部分 ...... #include <rtm/DataInPort.h> #include <rtm/DataOutPort.h>

#include "Aria.h" //<-この部分をコメントアウトすると競合が消えます #include <windows.h> #include <stdio.h> #include <vector> #include <string> #include <sstream>

using namespace RTC; ........

開発環境 使用OS Windows10 使用言語 C++ 使用ソフトウェア OpenRTM 1.1.2(32bit) VisualStudio2013 Professional ライブラリ MobileRobotics社 Aria2.9.4(32bit)

日本語
Miyamoto Nobuhiko
オフライン
Last seen: 1日 13時間 前
登録日: 2013-12-19 00:41
Re: ライブラリの競合について

エラーの原因ですが、これはAriaのヘッダーファイルでwinsock2.hをインクルードしているため発生しています。 OpenRTM-aistのインクルードファイルでwindows.hをインクルードするようになっており、winsock2.hをwindows.hよりも後にインクルードした場合、エラーになります。

この問題の解決策としては、以下の2つの方法があります。

① Aria.hをOpenRTM-aistのインクルードファイルよりも先にインクルードする

RTC Builderで生成したコードであれば、****Comp.cppのインクルードの順番は以下のようになっています。(****はモジュール名)

 #include <rtm/Manager.h>
 #include <iostream>
 #include <string>
 #include <stdlib.h>
 #include "****.h"

これを以下のように順番を変更してください。

 
 #include "****.h"
 #include <rtm/Manager.h>
 #include <iostream>
 #include <string>
 #include <stdlib.h>

次にヘッダーファイル****.hの先頭でAria.hをインクルードしてください。これでエラーは発生しなくなります。

 #include "Aria.h"
 
 #include <rtm/idl/BasicDataTypeSkel.h>
 #include <rtm/idl/ExtendedDataTypesSkel.h>
 #include <rtm/idl/InterfaceDataTypesSkel.h>

②別ファイルに分離する

他の方法としては、Aria.hをインクルードするファイルを別のcppファイルに分離するということもできます。

コメントを投稿するにはログインまたはユーザー登録を行ってください

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2195
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク