[omniORB] omniORB on windows 2003 64-bit

Peter Klotz peter.klotz at aon.at
Thu Apr 20 22:47:47 BST 2006


Hi Igor

> There are only precompiled packages for win32. And since the instructions to 
> set-up VS projects with omniORB only mentiones win32, is it at all possible 
> (I mean, did anyone actualy done it succesfully and is hapilly using such 
> ORB) to compile omniORB 64-bit?

Of course. We are using omniORB under Windows XP x64 Edition compiled 
with cl 14.00 for x64 (from Visual Studio 2005).

Some time ago I have sent a patch against omniORB 4.0.6 to make it 
compile under x64 Windows. It has been incorporated into omniORB 4.0.7.

Two things you should be aware of when compiling omniORB for x64:

* You need an x64 version of Python to compile omniORB. Python 2.4.x 
does compile out of the box with cl 14.00 but it crashes due to the 
secure runtime library shipped with VS2005. The attached patch (that 
will be incorporated into Python 2.5) fixes that.

* Compilation of omniORB stops at some point because the manifest files 
needed to execute omniidl and omnicpp are not copied by the build 
process. Copy the two manifest files 
(src\tool\omniidl\cxx\omniidl.exe.manifest and 
src\tool\omniidl\cxx\cccp\omnicpp.exe.manifest) manually into directory 
bin\x86_win32.

Best regards, Peter.
-------------- next part --------------
diff -burN Python-2.4.3/Python/pythonrun.c Python-2.4.3.patched/Python/pythonrun.c
--- Python-2.4.3/Python/pythonrun.c	2005-03-29 14:32:50.000000000 +0200
+++ Python-2.4.3.patched/Python/pythonrun.c	2005-12-06 09:42:46.265625000 +0100
@@ -1654,6 +1654,23 @@
 	return context.sa_handler;
 #else
 	PyOS_sighandler_t handler;
+/* Special signal handling for the secure CRT in Visual Studio 2005 */
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+	switch (sig) {
+	/* Only these signals are valid */
+	case SIGINT:
+	case SIGILL:
+	case SIGFPE:
+	case SIGSEGV:
+	case SIGTERM:
+	case SIGBREAK:
+	case SIGABRT:
+		break;
+	/* Don't call signal() with other values or it will assert */
+	default:
+		return SIG_ERR;
+	}
+#endif /* _MSC_VER && _MSC_VER >= 1400 */
 	handler = signal(sig, SIG_IGN);
 	if (handler != SIG_ERR)
 		signal(sig, handler);


More information about the omniORB-list mailing list