omniORB 3 for FreeBSD

attlogo6876_dk.gif (2280 bytes)

sideHome.gif (2321 bytes) sideDownload.gif (2450 bytes) sideDocumentation.gif (2512 bytes) sideFAQ.gif (2344 bytes) sidePatch.gif (2543 bytes) sideSearch.gif (2403 bytes)  
omniORB 3 has been tested on FreeBSD 4.0.

For FreeBSD 3.2, the following information may be useful.

This information is provided by Andre Fornacon.

If you have questions regarding omniORB on FreeBSD send them to [email protected].

I compiled omniORB 2.7.1 on a FreeBSD 3.2 (RELEASE) system using the pthreads from libc , gnu make and egcs 1.1.2.

the config file for FreeBSD builds:

  • omniORB 2.7.1 shared and static libraries
  • omniORB utils linked static against the omniORB libs

    [ not enabled by default, edit to do so. - SLL ]

to build applications with omniORB on FreeBSD use:
        CXXFLAGS += -D__x86__ -D__freebsd__ -D__OSVERSION__=3
for dynamic linked binaries:
        LDFLAGS = -L<YOUR_OMNIORB_DIRECTORY>/lib/x86_freebsd_3.2
        LDFLAGS += -lomniORB2 -lomniDynamic2 -ltcpwrapGK -lomnithread
        LDFLAGS += -Wl,-rpath,<YOUR_OMNIORB_DIRECTORY>/lib/x86_freebsd_3.2
for static linked binaries:
        LDFLAGS = -L/lib/x86_freebsd_3.2
        LDFLAGS += -Wl,-Bstatic 
        LDFLAGS += -lomniORB2 -lomniDynamic2 -ltcpwrapGK -lomnithread
        LDFLAGS += -Wl,-Bdynamic

Note!link with the -lpthread flag

During the port I ran into the following problems:

  • fcntl.h doesn't define O_SYNC, so i used O_FSYNC instead
    • omniORB-2.7.1/src/appl/omniNames/
    • omniORB-2.7.1/src/appl/omniNames/
  • need to include unistd.h and sys/wait.h on freebsd in
    • omniORB-2.7.1/src/tool/omniidl2/driver/
    • omniORB-2.7.1/src/tool/omniidl2/driver/
  • stock egcs 1.1.2 doesn't support the FreeBSD specific -pthread linking flag as the supplied gcc (2.7.2) does. just using -lc_r results into binaries linked against libc_r and libc. 'cause libc_r comes first it may work but isn't a good idea IMHO. so i modified the egcs-1.1.2/gcc/config/i386/freebsd-elf.h file the diff is attached below. apply it and rebuild egcs. [i rename the compiler drivers from gcc and g++ to egcs and egcs++ just to make sure i don't use the supplied system gcc/g++]
    --- /src/egcs-1.1.2/gcc/config/i386/freebsd-elf.h.orig  Wed Mar 17 20:39:58 1999
    ------------ begin freebsd 3.2 egcs pthread patch ----------------
    +++ /src/egcs-1.1.2/gcc/config/i386/freebsd-elf.h       Sat Jun 12 14:19:19 1999
    @@ -145,26 +145,17 @@
     #undef CPP_PREDEFINES
    -#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
    +#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__=3 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
     #undef CPP_SPEC
     #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
     #undef LIB_SPEC
    -#if 1
     /* We no longer link with libc_p.a or libg.a by default. If you
      * want to profile or debug the C library, please add
      * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
    -#define LIB_SPEC \
    -  "%{!shared: %{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} \
    -     %{!ggdb:-lc} %{ggdb:-lg}}"
    -#define LIB_SPEC \
    -  "%{!shared: \
    -     %{mieee-fp:-lieee} %{p:-lgmon -lc_p} %{pg:-lgmon -lc_p} \
    -       %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}"
    +#define LIB_SPEC "%{!shared:%{!pg:%{!pthread:%{!kthread:-lc}%{kthread:-lpthread -lc}}%{pthread:-lc_r}}%{pg:%{!pthread:%{!kthread:-lc_p}%{kthread:-lpthread_p -lc_p}}%{pthread:-lc_r_p}}}"
     /* Provide a LINK_SPEC appropriate for FreeBSD.  Here we provide support
        for the special GCC options -static and -shared, which allow us to
    ------------ end freebsd 3.2 egcs pthread patch ----------------

For comments, feedback, etc, please see the 'Keeping in touch' page.
Copyright 1999 - AT&T Laboratories Cambridge