Trying to call some C code using Extern(C) but got unexpected linker error

Steven Schveighoffer schveiguy at gmail.com
Sat Jun 8 03:09:36 UTC 2024


On Saturday, 8 June 2024 at 02:22:00 UTC, Xiaochao Yan wrote:
> Hi, I am new to D and is experimenting with game development 
> using D and C.
>
> I had some problem when trying to recreate the
> https://dlang.org/spec/importc.html
>
> Environment:
> Windows 11
> gcc.exe (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 
> 8.1.0
>
> Error Message:
> ```
> lld-link: error: undefined symbol: 
> _D4test4mainFZ12printMessageUZv
>>>> referenced by test.obj:(_Dmain)
>
> ```
>
> ```
> // .c file
> #include <stdio.h>
>
> void printMessage() {
>     printf("Hello from C!\n");
> }
> ```
>
> ```
> // .d file
> import std.stdio;
> import std.conv;
> import test;
>
> void main() {
>
>     writeln("Hello, World!");
>     extern (C) void printMessage();
>     printMessage();
> }
> ```
> Thanks in advance!

Put `printMessage` outside the main function. Inside the main 
function, it has C linkage, but not C name mangling.

-Steve


More information about the Digitalmars-d-learn mailing list