As I said, we have successfully built a multiplatform library, which of course uses expect / actual as described.
However, the answer by @pdvieze describes how build multiplatform code (which is easy and works well) but it is not a useful answer for how to use a multiplatform library within another multiplatform project.
The only obvious way to use expect actual as defined there is to import the same function for each platform, and wrap that function in a new function. Repeat the exact same code for each platform. Then have all possible imports and create wrappers for them and repeat that boilerplate in each platform.
So in place of
import lib.someFunction
in common, we can have
expect multiSomeFunction() // need full signature here, although import does not
Then for every platform we repeat the exact same code
import lib.someFunction
actual multlSomeFunction () = someFunction()
And repeat this boilerplate code over and over for every export from the library, and then copy and paste the exact same boilerplate into every platform ??
The end result of that is multiplatform would be a joke as soon as common code needs make use of multiplatform libraries.
You are better off creating separate projects for each platform, because you will have less repeated boilerplate code than with multiplatform.
The guys designing multiplatform are better than that, which suggests using expect/actual to wrapper for functions implemented in multiplatform libraries is not the solution. Hopefully there is a solution.
We have cases where common seems to be able to import from platform based dependencies, which would be (and in those cases is) a perfect solution. However it seems it does not always work, and always syntax highlights as an error, even when it does work.