Problems with omniORB and omniORBpy on Tru64 - with solution
Marcin Kasperski
Marcin.Kasperski at softax.com.pl
Tue Jun 19 14:13:59 EDT 2001
{ I post this letter to comp.lang.python as
some people could be interested in building
omniORBPython on Tru64 and to
omniorb at uk.research.att.com as bugreport. }
I am currently trying to compile
Python/OmniORB/OmniORBpython suite on Tru64 Unix (new
name for Digital Unix/OSF) with DEC CXX 6.2. I got some
problems and solved it, below there are some interesting
details.
The tests described below used Python 2.1 and
omniORB 3.0.3.
1) There is one major flaw in omniORB makefiles for
Tru64: in many places they use 'ld' to link C++ code.
This leads to things like
ld:
Warning: Unresolved:
__nwa__XUl
__dla__XPv
__stdnw__XUl
__vtbl_3std9type_info__3std
__vec_new_eh
__vec_delete
(the symbols change from place to place).
The 'so' files are created but are useless (can not be
run with or - in case of python extension modules
- can not be imported - due to unresolved symbols).
To correct the problem I edited the following files:
omni/mk/platforms/alpha_osf1_5.0.mk
(under 'define MakeCXXSharedLibrary')
omni/src/tool/omniidl/cxx/dir.mk
(under 'OSF1')
omni/src/lib/omniORB2/orbcore/sharedlib/dir.mk
(under 'OSF1')
omni/src/lib/omniORB2/dynamic/sharedlib/dir.mk
(under 'OSF1')
omni/src/lib/omniORB2/orbcore/gatekeepers/tcpwrapper/sharedlib/dir.mk
(under 'OSF1')
and (the file from omniORBpy):
omni/src/lib/omniORBpy/modules/dir.mk
(under 'OSF1').
In all those placed I:
- changed 'ld' to 'cxx'
- removed '-lcxxstd -lcxx -lexc -lots -lc' (no longer needed)
For instance, the last of the files mentioned contain after
my change (look forward for PYLIBDIR and -lm which were added
by me too):
$(lib): $(OBJS)
(set -x; \
$(RM) $@; \
cxx -shared -soname $(soname) -set_version $(soname) -o $@
$(IMPORT_LIBRARY_FLAGS) \
$(filter-out $(LibSuffixPattern),$^) $(OMNIORB_LIB_NODYN) \
-L$(PYLIBDIR) -l$(PYLIBFILE) \
-lm \
)
2) Lack of linkage with Python
{The thing which proves nobody attempted the compilation ;-)}
While compiling in directories
omni/src/tool/omniidl/cxx/
and (the dir from omniORBpy):
omni/src/lib/omniORBpy/modules/
I got
Warning: Unresolved:
PyType_Type
_Py_NoneStruct
PyTuple_Type
PyList_Type
(... many more ...)
The reason is simple: rules for Tru64 (and maybe other
platforms too) does not link with libpython! To correct
it I edited the files
omni/src/tool/omniidl/cxx/dir.mk
and
omni/src/lib/omniORBpy/modules/dir.mk
and in both cases:
a) I added the lines
PYLIBDIR := $(PYPREFIX)/lib/python$(PYVERSION)/config
PYLIBFILE := python$(PYVERSION)
within 'ifdef UnixPlatform', just below PYINCFILE := ...
b) I added
-L$(PYLIBDIR) -l$(PYLIBFILE) -lm
to the linking rule under OSF1 (look 20 lines up to see
the example). -lm seems to be required by python
libraries, without it I got unresolved frexp, modf, fabs
etc.
3) DEC CXX complained for incorrect syntax on
#if NeedVarargsPrototypes
(I observed numerous warning and got errors in
omni/src/tool/omkdepend/main.c). To correct,
I grepped for this and changed to
#ifdef NeedVarargsPrototypes
and got correct compilation.
Instead one probably could edit omni/src/tool/omkdepend/def.h
and change from
#if defined(__osf1__)
#define NeedVarargsPrototypes
#endif
to
#if defined(__osf1__)
#define NeedVarargsPrototypes 1
#endif
but the first solution seems to me to be better for
other platforms.
4) This problem is probably independent from omniORB but
very important. The default compilation results in
Traceback (innermost last):
File "<string>", line 1, in ?
ImportError: dlopen: Unresolved symbols
during the first call to omniidl. The reason? There are
no symbols from libcxx.so. It is probably some
'dynaload' python problem. To correct it I recompiled
python itself with cxx instead of cc. The very details
I describe in the separate letter which should come
together with this one.
5) After everything described above I got running
omniORB and omniORBpython on Tru64. At least the first
samples I tried worked as expected.
More information about the Python-list
mailing list