You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`port/*.def` is an explicit list, and the import library generated from it
contains exactly those names. I added three declarations to `src/win32.h` for
openkal 0.8 and did not add the names, so the import library this package
generates for its consumers was missing them.
⚠️ AND THIS PACKAGE'S OWN CI STAYED GREEN, because this package does not link.
The failure appeared one repository away, in openkal-llvm-runtime's cross-build:
ld.lld: error: undefined symbol: __declspec(dllimport) CreatePipe
ld.lld: error: undefined symbol: __declspec(dllimport) GetConsoleScreenBufferInfo
ld.lld: error: undefined symbol: __declspec(dllimport) SetConsoleMode
which reads as a defect in the consumer and is nothing of the kind.
⭐ IT WAS FOUND BY COMPARING IMPORT LIBRARIES, NOT BY READING THE ERROR. Every
copy of a vendor `libkernel32.a` on the machine had all three; the one generated
here had `GetConsoleMode` and not `SetConsoleMode`, which is not a shape a
vendor's library takes and pointed straight at the generated list.
The check added here is the one that would have caught it: every name
`src/win32.h` declares must be exported by some `.def`. It belongs in this
repository, where the two lists are, rather than in the consumer that trips over
the difference.
Measured both ways: removing `CreatePipe` from the list makes it red and names
the symbol; the lists as committed are 42 declared, 49 exported, none missing.
A denominator is asserted on both sides, since two empty lists have an empty
difference too.
0 commit comments