Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp	(revision 635)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp	(revision 636)
@@ -677,4 +677,5 @@
 	}
 
+	_ASSERT( false );
 	throw;
 }
@@ -693,4 +694,5 @@
 	}
 
+	_ASSERT( false );
 	throw;
 }
@@ -699,4 +701,5 @@
 	if( vtblMasterListOffset == -1 )
 	{
+		_ASSERT( false );
 		throw;
 	}
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp	(revision 635)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp	(revision 636)
@@ -34,5 +34,5 @@
 }
 
-void Meta::StaticLink( Meta &meta, long dataSectionBaseOffset, int sourceIndexBase )
+void Meta::StaticLink( Meta &meta, long dataSectionBaseOffset, const std::vector<int> &relationTable )
 {
 	// 名前空間
@@ -53,5 +53,5 @@
 
 		pUserProc->GetNativeCode().ResetDataSectionBaseOffset( dataSectionBaseOffset );
-		pUserProc->GetNativeCode().ResetSourceIndexes( sourceIndexBase );
+		pUserProc->GetNativeCode().ResetSourceIndexes( relationTable );
 
 		this->userProcs.Put( pUserProc );
@@ -75,4 +75,5 @@
 		CClass *pClass = meta.GetClasses().Iterator_GetNext();
 		pClass->isTargetObjectModule = false;
+		pClass->Readed();
 		this->GetClasses().Put( pClass );
 	}
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp	(revision 635)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp	(revision 636)
@@ -45,5 +45,5 @@
 				sourceLine.GetLineNum(),
 				baseOffset + sourceLine.GetNativeCodePos(),
-				sourceLine.GetSourceIndex(),
+				sourceLine.GetRelationalObjectModuleIndex(),	// TODO: 複数libの取り込みを想定できていない（ソースコード行番号とネイティブコード位置の対応情報の追加は静的リンクが完了した後に行うべき）
 				sourceLine.GetSourceCodePos(),
 				sourceLine.GetCodeType()
@@ -152,9 +152,9 @@
 	}
 }
-void NativeCode::ResetSourceIndexes( long sourceIndexBase )
+void NativeCode::ResetSourceIndexes( const std::vector<int> &relationTable )
 {
 	BOOST_FOREACH( SourceLine &sourceLine, sourceLines )
 	{
-		sourceLine.SetSourceIndex( sourceLine.GetSourceIndex() + sourceIndexBase );
+		sourceLine.SetRelationalObjectModuleIndex( relationTable[sourceLine.GetRelationalObjectModuleIndex()] );
 	}
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp	(revision 635)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp	(revision 636)
@@ -58,13 +58,14 @@
 void ObjectModule::StaticLink( ObjectModule &objectModule )
 {
+	const std::vector<int> relationTable = this->GetRelationTable( objectModule.relationalObjectModuleNames );
+
 	long dataSectionBaseOffset = dataTable.GetSize();
-	int sourceIndexBase = (int)sources.size();
 
 	// メタ情報を結合
-	meta.StaticLink( objectModule.meta, dataSectionBaseOffset, sourceIndexBase );
+	meta.StaticLink( objectModule.meta, dataSectionBaseOffset, relationTable );
 
 	// グローバル ネイティブコードを結合
 	objectModule.globalNativeCode.ResetDataSectionBaseOffset( dataSectionBaseOffset );
-	objectModule.globalNativeCode.ResetSourceIndexes( sourceIndexBase );
+	objectModule.globalNativeCode.ResetSourceIndexes( relationTable );
 	globalNativeCode.PutEx( objectModule.globalNativeCode );
 
@@ -73,13 +74,36 @@
 	dataTable.Add( objectModule.dataTable );
 
-	// ソースコードを結合
-	BOOST_FOREACH( const BasicSource &source, objectModule.sources )
-	{
-		this->sources.push_back( source );
-	}
-
 	// TODO: basbufがいらなくなったら消す
 	extern char *basbuf;
-	basbuf = this->sources[0].GetBuffer();
+	basbuf = this->source.GetBuffer();
+}
+
+const std::vector<int> ObjectModule::GetRelationTable( const Jenga::Common::Strings &oldRelationalObjectModuleNames )
+{
+	// 要素 = 古いインデックス、値 = 新しいインデックス
+	std::vector<int> relationTable;
+
+	// リレーションテーブルを構築
+	BOOST_FOREACH( const std::string &oldRelationalObjectModuleName, oldRelationalObjectModuleNames )
+	{
+		bool isMatch = false;
+		for( int i=0; i<static_cast<int>(this->relationalObjectModuleNames.size()); i++ )
+		{
+			if( oldRelationalObjectModuleName == this->relationalObjectModuleNames[i] )
+			{
+				isMatch = true;
+				relationTable.push_back( i );
+				break;
+			}
+		}
+
+		if( !isMatch )
+		{
+			// エラー
+			_ASSERT( false );
+		}
+	}
+
+	return relationTable;
 }
 
