extern intended behavior?
Derek Parnell
derek at psych.ward
Tue Jun 13 07:05:39 PDT 2006
On Tue, 13 Jun 2006 23:44:26 +1000, David Medlock <noone at nowhere.com>
wrote:
> Look at the following source files(main.d and test.d):
>
> // main.d ----------------------
> extern
> {
> void MyFunction();
> }
>
> void main(char[][] args )
> {
> MyFunction();
> }
>
>
> // test.d ----------------------
>
> import std.stdio;
>
> void MyFunction()
> {
> writefln("Hello World");
> }
>
> compiles fine, but linker complains:
> Error 42: Symbol Undefined _D4main10MyFunctionFZv
> --- errorlevel 1
>
>
> It appears the linker expects the extern function to be in the 'main'
> module. This appears to be incorrect behavior.
No its not. This is intentional.
> If it isn't why such a departure from a common C idiom(lex and yacc).
Don't know.
> Am I missing something?
Yes. The way to do this is D is that you also create another file
'test.di' that contains ...
// test.di --------------------
void MyFunction();
And you modify main.d
// main.d ----------------------
import test;
void main(char[][] args )
{
MyFunction();
}
Then you compile them as ...
dmd -c test
dmd main test.obj
--
Derek Parnell
Melbourne, Australia
More information about the Digitalmars-d
mailing list