<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Foreign Function Interface on ErrorVault — Developer Error Code Dictionary</title>
    <link>https://errorvault.dev/tags/foreign-function-interface/</link>
    <description>Recent content in Foreign Function Interface on ErrorVault — Developer Error Code Dictionary</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 12 Aug 2026 19:56:04 +0800</lastBuildDate>
    <atom:link href="https://errorvault.dev/tags/foreign-function-interface/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Fix E0805: Extern Types Cannot Have Lifetimes</title>
      <link>https://errorvault.dev/rust/rust-e0805-extern-types-cannot-have-lifetimes/</link>
      <pubDate>Wed, 12 Aug 2026 19:56:04 +0800</pubDate>
      <guid>https://errorvault.dev/rust/rust-e0805-extern-types-cannot-have-lifetimes/</guid>
      <description>&lt;h2 id=&#34;1-symptoms&#34;&gt;1. Symptoms&lt;/h2&gt;&#xA;&lt;p&gt;When attempting to declare an extern type with a lifetime annotation, the Rust compiler immediately halts compilation and produces error E0805. The error message clearly indicates that lifetime parameters are prohibited on extern type declarations.&lt;/p&gt;&#xA;&lt;p&gt;The compiler output typically appears as follows:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error[E0805]: extern types cannot have lifetimes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; --&amp;gt; src/main.rs:3:17&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;3 | extern &amp;#34;C&amp;#34; { type Foo&amp;lt;&amp;#39;a&amp;gt;; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  |                      ^^-- lifetime used in type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In more complex scenarios involving multiple lifetime parameters or where the extern type is nested within generic structures, the error message may expand to show the full context of where the invalid lifetime annotation appears:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix E0667: Async Not Allowed in Extern Declarations</title>
      <link>https://errorvault.dev/rust/rust-e0667-async-not-allowed-extern-declarations/</link>
      <pubDate>Mon, 10 Aug 2026 22:20:04 +0800</pubDate>
      <guid>https://errorvault.dev/rust/rust-e0667-async-not-allowed-extern-declarations/</guid>
      <description>&lt;h2 id=&#34;1-symptoms&#34;&gt;1. Symptoms&lt;/h2&gt;&#xA;&lt;p&gt;The Rust compiler emits error E0667 when attempting to declare an &lt;code&gt;async&lt;/code&gt; function within an &lt;code&gt;extern&lt;/code&gt; block or alongside the &lt;code&gt;#[no_mangle]&lt;/code&gt; attribute for foreign function interface definitions. This error manifests during compilation and prevents the binary from being built.&lt;/p&gt;&#xA;&lt;p&gt;When triggered, the compiler produces output similar to the following:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error[E0667]: &lt;span style=&#34;color:#ff79c6&#34;&gt;`&lt;/span&gt;async&lt;span style=&#34;color:#ff79c6&#34;&gt;`&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;not&lt;/span&gt; allowed &lt;span style=&#34;color:#ff79c6&#34;&gt;in&lt;/span&gt; extern declarations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;--&amp;gt;&lt;/span&gt; src&lt;span style=&#34;color:#ff79c6&#34;&gt;/&lt;/span&gt;main.rs:&lt;span style=&#34;color:#bd93f9&#34;&gt;3&lt;/span&gt;:&lt;span style=&#34;color:#bd93f9&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt; extern &lt;span style=&#34;color:#f1fa8c&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;^^^^^^^^^^^^^^&lt;/span&gt; invalid decoration&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;     pub async fn &lt;span style=&#34;color:#50fa7b&#34;&gt;foreign_async_function&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;              &lt;span style=&#34;color:#ff79c6&#34;&gt;^^^^^&lt;/span&gt; invalid here&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The error message specifically highlights the &lt;code&gt;async&lt;/code&gt; keyword as invalid, pointing to its location within the extern block. In some variations of the error, the compiler may also indicate that this restriction applies to both extern blocks and FFI function declarations with &lt;code&gt;#[no_mangle]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix E0583: Linkage Name Is Not Unique</title>
      <link>https://errorvault.dev/rust/rust-e0583-linkage-name-not-unique/</link>
      <pubDate>Mon, 03 Aug 2026 12:44:04 +0800</pubDate>
      <guid>https://errorvault.dev/rust/rust-e0583-linkage-name-not-unique/</guid>
      <description>&lt;h2 id=&#34;1-symptoms&#34;&gt;1. Symptoms&lt;/h2&gt;&#xA;&lt;p&gt;When the Rust compiler encounters error E0583, you will see a diagnostic message similar to the following in your build output:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;error[E0583]: linkage name &lt;span style=&#34;color:#ff79c6&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;unique&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#ff79c6&#34;&gt;--&amp;gt;&lt;/span&gt; src&lt;span style=&#34;color:#ff79c6&#34;&gt;/&lt;/span&gt;main.rs:&lt;span style=&#34;color:#bd93f9&#34;&gt;10&lt;/span&gt;:&lt;span style=&#34;color:#bd93f9&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;10&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt; extern &lt;span style=&#34;color:#f1fa8c&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;11&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;     &lt;span style=&#34;color:#6272a4&#34;&gt;#[link_name = &amp;#34;my_function&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;12&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;     fn &lt;span style=&#34;color:#50fa7b&#34;&gt;my_function&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;13&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;     &lt;span style=&#34;color:#6272a4&#34;&gt;#[link_name = &amp;#34;my_function&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;14&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;     fn &lt;span style=&#34;color:#50fa7b&#34;&gt;my_function&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#bd93f9&#34;&gt;15&lt;/span&gt; &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#ff79c6&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#ff79c6&#34;&gt;=&lt;/span&gt; linkage name &lt;span style=&#34;color:#ff79c6&#34;&gt;`&lt;/span&gt;my_function&lt;span style=&#34;color:#ff79c6&#34;&gt;`&lt;/span&gt; used &lt;span style=&#34;color:#ff79c6&#34;&gt;in&lt;/span&gt; multiple &lt;span style=&#34;color:#ff79c6&#34;&gt;`&lt;/span&gt;extern&lt;span style=&#34;color:#ff79c6&#34;&gt;`&lt;/span&gt; blocks &lt;span style=&#34;color:#ff79c6&#34;&gt;for&lt;/span&gt; the same ABI&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The compiler identifies that the same linkage name appears multiple times within an &lt;code&gt;extern&lt;/code&gt; block, which violates the uniqueness requirement for foreign function symbols. The error points to the specific lines where the duplicate declarations occur and includes a note explaining that the linkage name must be unique for each ABI.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
