Skip to content

Referencing a project that exposes WIT bindings gives linker error #92

@lukechu10

Description

@lukechu10

Background: I am interested in compiling F# to a WASM component. So far, I've managed to get a simple WASI "Hello, world!" program compiling and running using componentize-dotnet. For the next step, I wanted to access host bindings exposed via a WIT file. Since wit-bindgen generates C#, and not F# source files, it does not seem like I can do this directly from F#.

What I have experimented so far is creating a new C# Project which imports the wit file, and then reference this C# project from F#. With this setup, the auto-generated host bindings seem to be accessible to F#. However, I get some kind of link error when trying to build the project:

error: failed to encode component

Caused by:
    0: failed to decode world from module
    1: module was not valid
    2: no top-level imported function `foobar` specified
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Here, foobar is a function that I am exposing from my wit file:

package example:host;
world host {
    import foobar: func ();
}

This error only occurs when actually calling HostWorld.exports.HostWorld.Foobar () somewhere from the F# project or from the C# project.

Is there some combination of configurations that could make this setup work? If there is, it would be nice for this to be documented somewhere since I could not find any relevant information.

Environment:

  • BytecodeAlliance.Componentize.DotNet.Wasm.SDK: 0.7.0-preview00010
  • runtime.linux-x64.microsoft.dotnet.ilcompiler.llvm: 10.0.0-alpha.1.25162.1
  • OS: Linux x64
  • .NET: 10.0.100-preview.6

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions