# [component_container_isolated]：加载组件失败：未找到名为 'my_pkg::MyComponent' 的类：无匹配项

- **ID:** `ros2/component-container-isolated-failed-load`
- **领域:** ros2
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 85%

## 根因

组件类未向组件容器注册；要么缺少类导出宏，要么包的插件描述 XML 不正确。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| ROS 2 Humble | active | — | — |
| ROS 2 Iron | active | — | — |
| ROS 2 Rolling | active | — | — |

## 解决方案

1. ```
   在组件源文件中添加 RCLCPP_COMPONENTS_REGISTER_NODE 宏：`RCLCPP_COMPONENTS_REGISTER_NODE(my_pkg::MyComponent)`，并确保 package.xml 导出插件：`<export><build_type>ament_cmake</build_type><ros2_component plugin="${prefix}/my_plugins.xml"/></export>`
   ```
2. ```
   检查插件描述 XML 文件（例如 my_plugins.xml）中的库路径是否正确：`<library path="libmy_pkg_component"><class type="my_pkg::MyComponent" base_class_type="rclcpp::Node"/></library>`
   ```
3. ```
   运行 `ros2 component types` 验证组件是否已注册；如果未列出，则导出缺失。
   ```

## 无效尝试

- **Recompiling the package without cleaning build artifacts** — The issue is in plugin registration, not compilation; rebuild doesn't fix missing exports. (40% 失败率)
- **Manually copying the .so file to the container's library path** — The container loads via pluginlib, not direct library loading; registration is required. (80% 失败率)
- **Using component_container instead of component_container_isolated** — Both containers use the same plugin registration mechanism; the error will persist. (60% 失败率)
