Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
May 19, 2004 [gdc] c and d linking issue | ||||
---|---|---|---|---|
| ||||
I'm trying to compile this code on OS X Panther with gdc: [ctest.c] #include <stdio.h> extern void callMe(); int main() { callMe(); } [callme.d] class Foo { this() { } } extern (C) void callMe() { Foo s = new Foo(); // This causes the problem. } I'm compiling and linking like this: gcc -c ctest.c gdc -c callme.d gdc -o ctest callme.o ctest.o Running ctest causes a 'Bus error'. After playing with it for a while, instantiating Foo seems to be the problem. If I comment out that line it compiles and runs just fine. Is this behavior expected? Am I doing something wrong or is this a bug? I'm using gdc 1f with gcc 3.4.0 20040317 on Mac OS 10.3.3. P.S. I wasn't sure if this should have gone in the bugs group, since I don't know if it affects dmd or not. I also am not sure if this is just a mistake on my part or a real bug. If I did put this in the wrong group, I apologize and please let me know for future reference. Thanks. |
May 19, 2004 Re: [gdc] c and d linking issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Michael | I think the problem is this: The program is starting from the C main in ctest.c and garbage collector is not being initialized.
The Phobos library contains a C 'main' function which does initialization and calls the D 'main' function (really '_Dmain').
Do you absolutely need the main function to be in C?
David
Michael wrote:
> I'm trying to compile this code on OS X Panther with gdc:
>
> [ctest.c]
> #include <stdio.h>
>
> extern void callMe();
>
> int main() {
> callMe();
> }
>
> [callme.d]
> class Foo {
> this() {
> }
> }
>
> extern (C) void callMe() {
> Foo s = new Foo(); // This causes the problem.
> }
>
> I'm compiling and linking like this:
> gcc -c ctest.c
> gdc -c callme.d
> gdc -o ctest callme.o ctest.o
>
> Running ctest causes a 'Bus error'. After playing with it for a while, instantiating Foo seems to be the problem. If I comment out that line it compiles and runs just fine. Is this behavior expected? Am I doing something wrong or is this a bug?
>
> I'm using gdc 1f with gcc 3.4.0 20040317 on Mac OS 10.3.3.
>
> P.S. I wasn't sure if this should have gone in the bugs group, since I don't know if it affects dmd or not. I also am not sure if this is just a mistake on my part or a real bug. If I did put this in the wrong group, I apologize and please let me know for future reference. Thanks.
>
|
May 19, 2004 Re: [gdc] c and d linking issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Friedman | Thanks, I figured that may be the problem. I'm actually wondering because SDL on OS X uses an objective C stub to initialize the program then call your SDL_main function. I have seen at least one SDL program written in D running on OS X(but without source), so there must be a way. Do I have to use all global functions? Things seem to work if I avoid classes, but I would prefer not to use that approach as it seems likely I might run into other problems down the road. Are there any work arounds? Thanks.
On 2004-05-19 10:23:48 -0500, David Friedman <d3rdclsmail@earthlink.net> said:
> I think the problem is this: The program is starting from the C main in ctest.c and garbage collector is not being initialized.
>
> The Phobos library contains a C 'main' function which does initialization and calls the D 'main' function (really '_Dmain').
>
> Do you absolutely need the main function to be in C?
>
> David
>
> Michael wrote:
>> I'm trying to compile this code on OS X Panther with gdc:
>>
>> [ctest.c]
>> #include <stdio.h>
>>
>> extern void callMe();
>>
>> int main() {
>> callMe();
>> }
>>
>> [callme.d]
>> class Foo {
>> this() {
>> }
>> }
>>
>> extern (C) void callMe() {
>> Foo s = new Foo(); // This causes the problem.
>> }
>>
>> I'm compiling and linking like this:
>> gcc -c ctest.c
>> gdc -c callme.d
>> gdc -o ctest callme.o ctest.o
>>
>> Running ctest causes a 'Bus error'. After playing with it for a while, instantiating Foo seems to be the problem. If I comment out that line it compiles and runs just fine. Is this behavior expected? Am I doing something wrong or is this a bug?
>>
>> I'm using gdc 1f with gcc 3.4.0 20040317 on Mac OS 10.3.3.
>>
>> P.S. I wasn't sure if this should have gone in the bugs group, since I don't know if it affects dmd or not. I also am not sure if this is just a mistake on my part or a real bug. If I did put this in the wrong group, I apologize and please let me know for future reference. Thanks.
|
May 19, 2004 Re: [gdc] c and d linking issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Michael | I ran into this problem too. What I do now is rename the 'main' in the SDL stub. Because each project has its own copy of the stub as a source file, this is very clean. The call sequence becomes... normal D main -> renamed SDL stub main -> SDL_main (written as "extern(C) SDL_main(int,char*) {....}" in D) My old solution was to build another version Phobos that uses '_d_rtl_start' as an entry point instead of 'main'. I then had the SDL_main call that. The gdc Makefile for Phobos still has this libphobosnm.a, but needs shinichiro's fix. (http://www.digitalmars.com/drn-bin/wwwnews?D.gnu/626) Neither or these is optimal. I have been thinking that Phobos initialization and the D 'main' function should be separated. This would be needed for shared libraries too. David Michael wrote: > Thanks, I figured that may be the problem. I'm actually wondering because SDL on OS X uses an objective C stub to initialize the program then call your SDL_main function. I have seen at least one SDL program written in D running on OS X(but without source), so there must be a way. Do I have to use all global functions? Things seem to work if I avoid classes, but I would prefer not to use that approach as it seems likely I might run into other problems down the road. Are there any work arounds? Thanks. > > On 2004-05-19 10:23:48 -0500, David Friedman <d3rdclsmail@earthlink.net> said: > >> I think the problem is this: The program is starting from the C main in ctest.c and garbage collector is not being initialized. >> >> The Phobos library contains a C 'main' function which does initialization and calls the D 'main' function (really '_Dmain'). >> >> Do you absolutely need the main function to be in C? >> >> David >> >> Michael wrote: >> >>> I'm trying to compile this code on OS X Panther with gdc: >>> >>> [ctest.c] >>> #include <stdio.h> >>> >>> extern void callMe(); >>> >>> int main() { >>> callMe(); >>> } >>> >>> [callme.d] >>> class Foo { >>> this() { >>> } >>> } >>> >>> extern (C) void callMe() { >>> Foo s = new Foo(); // This causes the problem. >>> } >>> >>> I'm compiling and linking like this: >>> gcc -c ctest.c >>> gdc -c callme.d >>> gdc -o ctest callme.o ctest.o >>> >>> Running ctest causes a 'Bus error'. After playing with it for a while, instantiating Foo seems to be the problem. If I comment out that line it compiles and runs just fine. Is this behavior expected? Am I doing something wrong or is this a bug? >>> >>> I'm using gdc 1f with gcc 3.4.0 20040317 on Mac OS 10.3.3. >>> >>> P.S. I wasn't sure if this should have gone in the bugs group, since I don't know if it affects dmd or not. I also am not sure if this is just a mistake on my part or a real bug. If I did put this in the wrong group, I apologize and please let me know for future reference. Thanks. > > > |
May 20, 2004 Re: [gdc] c and d linking issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Friedman | Thank you. That worked perfectly. I really appreciate you taking the time to respond and the work you put into gdc. In article <c8gdn5$2gm$1@digitaldaemon.com>, David Friedman <d3rdclsmail@earthlink.net> wrote: > I ran into this problem too. What I do now is rename the 'main' in the SDL stub. Because each project has its own copy of the stub as a source file, this is very clean. The call sequence becomes... > > normal D main > -> renamed SDL stub main > -> SDL_main (written as "extern(C) SDL_main(int,char*) {....}" in D) > > My old solution was to build another version Phobos that uses '_d_rtl_start' as an entry point instead of 'main'. I then had the SDL_main call that. The gdc Makefile for Phobos still has this libphobosnm.a, but needs shinichiro's fix. (http://www.digitalmars.com/drn-bin/wwwnews?D.gnu/626) > > Neither or these is optimal. I have been thinking that Phobos initialization and the D 'main' function should be separated. This would be needed for shared libraries too. > > David > > Michael wrote: > > Thanks, I figured that may be the problem. I'm actually wondering because SDL on OS X uses an objective C stub to initialize the program then call your SDL_main function. I have seen at least one SDL program written in D running on OS X(but without source), so there must be a way. Do I have to use all global functions? Things seem to work if I avoid classes, but I would prefer not to use that approach as it seems likely I might run into other problems down the road. Are there any work arounds? Thanks. > > > > On 2004-05-19 10:23:48 -0500, David Friedman <d3rdclsmail@earthlink.net> said: > > > >> I think the problem is this: The program is starting from the C main in ctest.c and garbage collector is not being initialized. > >> > >> The Phobos library contains a C 'main' function which does initialization and calls the D 'main' function (really '_Dmain'). > >> > >> Do you absolutely need the main function to be in C? > >> > >> David > >> > >> Michael wrote: > >> > >>> I'm trying to compile this code on OS X Panther with gdc: > >>> > >>> [ctest.c] > >>> #include <stdio.h> > >>> > >>> extern void callMe(); > >>> > >>> int main() { > >>> callMe(); > >>> } > >>> > >>> [callme.d] > >>> class Foo { > >>> this() { > >>> } > >>> } > >>> > >>> extern (C) void callMe() { > >>> Foo s = new Foo(); // This causes the problem. > >>> } > >>> > >>> I'm compiling and linking like this: > >>> gcc -c ctest.c > >>> gdc -c callme.d > >>> gdc -o ctest callme.o ctest.o > >>> > >>> Running ctest causes a 'Bus error'. After playing with it for a while, instantiating Foo seems to be the problem. If I comment out that line it compiles and runs just fine. Is this behavior expected? Am I doing something wrong or is this a bug? > >>> > >>> I'm using gdc 1f with gcc 3.4.0 20040317 on Mac OS 10.3.3. > >>> > >>> P.S. I wasn't sure if this should have gone in the bugs group, since I don't know if it affects dmd or not. I also am not sure if this is just a mistake on my part or a real bug. If I did put this in the wrong group, I apologize and please let me know for future reference. Thanks. > > > > > > |
Copyright © 1999-2021 by the D Language Foundation