Thread overview
Linkage
Jul 03, 2006
Karl Bochert
Jul 03, 2006
Lars Ivar Igesund
Jul 03, 2006
Karl Bochert
Jul 03, 2006
Lars Ivar Igesund
July 03, 2006
I'm trying to call a function in one file from another.
In particular I take the the winsamp.d demo ( where WinMain() calls myWinMain()
) and I move the myWinMain() fucntion to a new file (winapp.d) and lable it
'export'. Both files compile, but the linker complains that myWinMain() is not
found. More confusingly, if I leave myWinMain() in the winsamp.d file as well as
putting it in the second file, the linker complains that it CAN find both
myWinMain() functions.

So how do I link a function across files??



July 03, 2006
Karl Bochert wrote:

> I'm trying to call a function in one file from another.
> In particular I take the the winsamp.d demo ( where WinMain() calls
> myWinMain() ) and I move the myWinMain() fucntion to a new file (winapp.d)
> and lable it 'export'. Both files compile, but the linker complains that
> myWinMain() is not found. More confusingly, if I leave myWinMain() in the
> winsamp.d file as well as putting it in the second file, the linker
> complains that it CAN find both myWinMain() functions.
> 
> So how do I link a function across files??

Note that export don't make much sense in this case. A function in one file can be used in the other if the file is imported:

file1.d
------------
module file1;

void foo() {}

file2.d
-----------
module file2;

private import file1;

main()
{
  foo();
}



-- 
Lars Ivar Igesund
blog at http://larsivi.net
DSource & #D: larsivi
July 03, 2006
In article <e8ar15$14l5$2@digitaldaemon.com>, Lars Ivar Igesund says...
>
>Karl Bochert wrote:
>
>> I'm trying to call a function in one file from another.
>> In particular I take the the winsamp.d demo ( where WinMain() calls
>> myWinMain() ) and I move the myWinMain() fucntion to a new file (winapp.d)
>> and lable it 'export'. Both files compile, but the linker complains that
>> myWinMain() is not found. More confusingly, if I leave myWinMain() in the
>> winsamp.d file as well as putting it in the second file, the linker
>> complains that it CAN find both myWinMain() functions.
>> 
>> So how do I link a function across files??
>
>Note that export don't make much sense in this case. A function in one file can be used in the other if the file is imported:
>
>file1.d
>------------
>module file1;
>
>void foo() {}
>
>file2.d
>-----------
>module file2;
>
>private import file1;
>
>main()
>{
>  foo();
>}
>
>
>
>-- 
>Lars Ivar Igesund
>blog at http://larsivi.net
>DSource & #D: larsivi

Which brings up another question:

As I understand it, if file1 were in a subdirectory, it would be: import subdir.file1

Suppose file1.d is in a parallel directory -- i.e. '..\utildir\file1.d' ? or in the parent directory '..' ?





July 03, 2006
Karl Bochert wrote:

> In article <e8ar15$14l5$2@digitaldaemon.com>, Lars Ivar Igesund says...
>>
>>Karl Bochert wrote:
>>
>>> I'm trying to call a function in one file from another.
>>> In particular I take the the winsamp.d demo ( where WinMain() calls
>>> myWinMain() ) and I move the myWinMain() fucntion to a new file
>>> (winapp.d) and lable it 'export'. Both files compile, but the linker
>>> complains that myWinMain() is not found. More confusingly, if I leave
>>> myWinMain() in the winsamp.d file as well as putting it in the second
>>> file, the linker complains that it CAN find both myWinMain() functions.
>>> 
>>> So how do I link a function across files??
>>
>>Note that export don't make much sense in this case. A function in one file can be used in the other if the file is imported:
>>
>>file1.d
>>------------
>>module file1;
>>
>>void foo() {}
>>
>>file2.d
>>-----------
>>module file2;
>>
>>private import file1;
>>
>>main()
>>{
>>  foo();
>>}
>>
>>
>>
>>--
>>Lars Ivar Igesund
>>blog at http://larsivi.net
>>DSource & #D: larsivi
> 
> Which brings up another question:
> 
> As I understand it, if file1 were in a subdirectory, it would be: import subdir.file1
> 
> Suppose file1.d is in a parallel directory -- i.e. '..\utildir\file1.d' ? or in the parent directory '..' ?

You will then need to pass the root dir for the import to the compiler, for instance -I.. or -I../utildir

-- 
Lars Ivar Igesund
blog at http://larsivi.net
DSource & #D: larsivi