Thread overview
FreeBSD compile issue
Mar 27, 2014
Tyler
Mar 27, 2014
Martin Nowak
Mar 27, 2014
Joakim
Mar 31, 2014
Tyler
Apr 01, 2014
Joakim
March 27, 2014
Hi,
   I need to compile a D program in FreeBSD. I've followed the FreeBSD instructions. So far, dmd is creating the obj file, but there appears to be a problem with the linker. The error messages are very cryptic. I was hoping someone might have an idea what they mean and what I'm doing wrong here.

<CODE>
$ more hello.d
import std.stdio;

int main(string[] args)
{
    writefln("Hello World\n");
        return 0;
}
$ uname -a
FreeBSD freebsd 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
$
$
$ dmd hello.d
/home/jordantk/dmd2/freebsd/bin32/../lib32/libphobos2.a(thread_105_713.o)(.text.thread_entryPoint+0xf3): In function `thread_entryPoint':
: undefined reference to `__pthread_cleanup_push_imp'
/home/jordantk/dmd2/freebsd/bin32/../lib32/libphobos2.a(thread_105_713.o)(.text.thread_entryPoint+0x17b): In function `thread_entryPoint':
: undefined reference to `__pthread_cleanup_pop_imp'
--- errorlevel 1
$
</CODE>
March 27, 2014
On 03/27/2014 03:29 PM, Tyler wrote:
> Hi,
>     I need to compile a D program in FreeBSD. I've followed the FreeBSD
> instructions. So far, dmd is creating the obj file, but there appears to
> be a problem with the linker. The error messages are very cryptic. I was
> hoping someone might have an idea what they mean and what I'm doing
> wrong here.
>
> <CODE>
> $ more hello.d
> import std.stdio;
>
> int main(string[] args)
> {
>      writefln("Hello World\n");
>          return 0;
> }
> $ uname -a
> FreeBSD freebsd 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25
> UTC 2009 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
> $
> $
> $ dmd hello.d
> /home/jordantk/dmd2/freebsd/bin32/../lib32/libphobos2.a(thread_105_713.o)(.text.thread_entryPoint+0xf3):
> In function `thread_entryPoint':
> : undefined reference to `__pthread_cleanup_push_imp'
> /home/jordantk/dmd2/freebsd/bin32/../lib32/libphobos2.a(thread_105_713.o)(.text.thread_entryPoint+0x17b):
> In function `thread_entryPoint':
> : undefined reference to `__pthread_cleanup_pop_imp'
> --- errorlevel 1
> $
> </CODE>

Can you check, whether dmd is explicitly linking with -pthread?
It might an issue of libkse vs. libthr?
https://github.com/freebsd/freebsd/blob/0680c1f5fe159bba69a242568af0db7d7dc15a79/lib/libthr/thread/thr_clean.c#L49
We're building the binary releases on FreeBSD 8.4, so upgrading might help too.

March 27, 2014
On Thursday, 27 March 2014 at 14:29:25 UTC, Tyler wrote:
> Hi,
>    I need to compile a D program in FreeBSD. I've followed the FreeBSD instructions. So far, dmd is creating the obj file, but there appears to be a problem with the linker. The error messages are very cryptic. I was hoping someone might have an idea what they mean and what I'm doing wrong here.
>
> <CODE>
> $ more hello.d
> import std.stdio;
>
> int main(string[] args)
> {
>     writefln("Hello World\n");
>         return 0;
> }
> $ uname -a
> FreeBSD freebsd 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386

That is a very old FreeBSD release.  dmd from ports doesn't even compile for anything less than FreeBSD 8.  I suggest you at least upgrade to 7-stable, better another release branch completely.
March 31, 2014
Thanks for the info. The issue is a FreeBSD 6.2 system that unfortunately can't be upgraded. Do you think it will run if it's compiled on an x86 FreeBSD 8.4 system and moved to the 6.2 system?

-Tyler

On Thursday, 27 March 2014 at 18:16:18 UTC, Joakim wrote:
> On Thursday, 27 March 2014 at 14:29:25 UTC, Tyler wrote:
>> Hi,
>>   I need to compile a D program in FreeBSD. I've followed the FreeBSD instructions. So far, dmd is creating the obj file, but there appears to be a problem with the linker. The error messages are very cryptic. I was hoping someone might have an idea what they mean and what I'm doing wrong here.
>>
>> <CODE>
>> $ more hello.d
>> import std.stdio;
>>
>> int main(string[] args)
>> {
>>    writefln("Hello World\n");
>>        return 0;
>> }
>> $ uname -a
>> FreeBSD freebsd 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
>
> That is a very old FreeBSD release.  dmd from ports doesn't even compile for anything less than FreeBSD 8.  I suggest you at least upgrade to 7-stable, better another release branch completely.

April 01, 2014
On Monday, 31 March 2014 at 12:02:43 UTC, Tyler wrote:
>
> Thanks for the info. The issue is a FreeBSD 6.2 system that unfortunately can't be upgraded. Do you think it will run if it's compiled on an x86 FreeBSD 8.4 system and moved to the 6.2 system?

No idea, all I know is that dmd in ports was disabled on FreeBSD/7 years ago:

http://svnweb.freebsd.org/ports?view=revision&revision=267685

Maybe you can patch dmd or whatever else is necessary to get it working on older FreeBSD versions.