Story: Symbol visibility migration
Table of Contents
This page documents a story in Sprint 17. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
Goal
Apply -fvisibility=hidden globally so that only explicitly exported symbols
cross the shared-library boundary. Fix every missing EXPORT macro, break
cross-plugin compile-time dependencies, and build CLI and shell as static
libraries so they link cleanly on Windows.
Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 17 |
| Now | Completed 2026-05-21. |
| Waiting on | None. |
| Next | None. |
| Last touched | 2026-05-21 |
Acceptance
- All tasks complete; PR-by-PR breakdown in
git log.
Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Task: [cmake] Symbol visibility migration: -fvisibility=hidden across all shared libraries | DONE | 2026-05-22 | 2026-05-22 | - Applies `-fvisibility=hidden` to all 18 shared library targets and removes the `CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS` glob |
| Task: Fix missing export symbol definitions in trading.api and trading.core | DONE | 2026-05-22 | 2026-05-22 | - PR #738 added `ORES_X_LIBRARY` compile definitions and visibility flags to 43 libraries but missed `ores.trading.api` |
| Task: [qt] Break cross-plugin symbol dependencies (plugin isolation phase 1) | DONE | 2026-05-22 | 2026-05-22 | - Add `IBusinessUnitBrowser` abstract interface to `ores.qt.api`; `BusinessUnitController` implements it. `OrgExplorerMd |
| Task: [shell] Build ores.shell.lib as STATIC to fix Windows plugin DLL link | DONE | 2026-05-22 | 2026-05-22 | Hotfix for the Windows `Continuous Windows` workflow on `main`, which has been failing all four configurations (msvc/cla |
| Task: [cli] Build ores.cli.lib as a static library | DONE | 2026-05-22 | 2026-05-22 | - Fixes Windows link error: `undefined symbol: ores::cli::app::host::execute` |
| Task: [shell] Fix missing ORES_SHELL_EXPORT on host class (Windows linker error) | DONE | 2026-05-22 | 2026-05-22 | - `ores:::app::host` was missing the `ORES_SHELL_EXPORT` macro, so `host::execute` was not exported from the `ores |
| Task: Add export macro to parser class for DLL visibility | DONE | 2026-05-22 | 2026-05-22 | Add the `ORES_REFDATA_SERVICE_EXPORT` macro to the `parser` class declaration to ensure proper symbol visibility when bu |
Decisions
- Static CLI and shell
- building
ores.cli.libandores.shell.libas STATIC avoids Windows DLL export count limits and simplifies the link graph. - Plugin isolation phase 1
- cross-plugin compile-time dependencies were broken explicitly in a dedicated PR; runtime dependencies via plugin APIs are retained.
Out of scope
- Full plugin runtime isolation (deferred to v1).