omniorb und Visual Studio

omniORB ist ein beliebter ORB der in den meisten Linux Distributionen einfach installierbar ist. Unter Windows sieht es das eher schlecht aus. Windows Binaries werden entweder nicht mitgeliefert oder sind schlichtweg unpassend. Ich stand vor genau diesem Problem und habe omniORB auf Windows mit Visual Studio selbst gebaut.

Ich benutze im Folgenden:

Installation

Python 2

Wer bereits Python 2.6 oder 2.7 installiert hat, kann direkt zum nächsten Punkt springen.

Ansonsten, bitte Python 2.7.6 Windows X86-64 Installer herunterladen und installieren nach c:\Python27. (Installation bitte für alle)

Cygwin

Die Datei setup-x86_64.exe herunterladen und nach c:\cygwin installieren. Bei der Paketwauswahl würde ich bash, vim, make, diffutils und gcc gleich mitnehmen.

omniORB

Einfach das aktuelle omniORB Quellcode-only Paket herunterladen.
Das Entpacken kann man u.a. im cygwin machen (tar xjf omniORB-4.1.7.tar.bz2)

Vorbereiten und Bauen

Letzte Vorbereitungen

Man entpacke omniORB nach c:\dev, somit liegt er dann unter c:\dev\omniORB-4.1.7. Dort editiert man config\config.mk. Alle Zeilen mit platform müssen auskommentiert sein, also ein # als erstes Zeichen haben. Am Ende fügt man folgende Zeile ein platform = x86_win64_vs_10 (ohne Hashmark am Anfang). Dann kopiert man mk\platforms\x86_win32_vs_10.mk nach mk\platforms\x86_win64_vs_10.mk und öffnet mk\platforms\x86_win64_vs_10.mk im Editor.

  • Zeile 27 wird einkommentiert und muss nun lauten: PYTHON = /cygdrive/c/Python27/python
  • ab Zeile 32 muss in den Linkeroptionen -MACHINE:X64 hinzugefügt werden

Die Zeilen 27-54 sehen dann in etwa wie folgt aus:

PYTHON = /cygdrive/c/Python27/python


# Use the following set of flags to build and use multithreaded DLLs
#
MSVC_DLL_CXXNODEBUGFLAGS       = -MD -EHs -GS -GR -Zi -nologo
MSVC_DLL_CXXLINKNODEBUGOPTIONS = -nologo -manifest -DEBUG -MACHINE:X64
MSVC_DLL_CNODEBUGFLAGS         = -MD -GS -GR -Zi -nologo
MSVC_DLL_CLINKNODEBUGOPTIONS   = -nologo -manifest -DEBUG -MACHINE:X64
#
MSVC_DLL_CXXDEBUGFLAGS         = -MDd -EHs -RTC1 -GS -GR -Zi -nologo
MSVC_DLL_CXXLINKDEBUGOPTIONS   = -nologo -manifest -DEBUG  -MACHINE:X64
MSVC_DLL_CDEBUGFLAGS           = -MDd -RTC1 -GS -GR -Zd -Zi -nologo
MSVC_DLL_CLINKDEBUGOPTIONS     = -nologo -manifest -DEBUG  -MACHINE:X64
#
# Or
#
# Use the following set of flags to build and use multithread static libraries
#
MSVC_STATICLIB_CXXNODEBUGFLAGS       = -MT -EHs -GS -GR -Zi -nologo
MSVC_STATICLIB_CXXLINKNODEBUGOPTIONS = -nologo -manifest -DEBUG  -MACHINE:X64
MSVC_STATICLIB_CNODEBUGFLAGS         = -MT -GS -GR -Zi -nologo
MSVC_STATICLIB_CLINKNODEBUGOPTIONS   = -nologo -manifest -DEBUG  -MACHINE:X64

MSVC_STATICLIB_CXXDEBUGFLAGS         = -MTd -EHs -RTC1 -GS -GR -Zi -nologo
MSVC_STATICLIB_CXXLINKDEBUGOPTIONS   = -nologo -manifest -DEBUG  -MACHINE:X64
MSVC_STATICLIB_CDEBUGFLAGS           = -MTd -RTC1 -GS -GR -Zi -nologo
MSVC_STATICLIB_CLINKDEBUGOPTIONS     = -nologo -manifest -DEBUG -MACHINE:X64

Speichern.

Bauen

Öffne „Visual Studio x64 Win64 Command Prompt“ über das Startmenü und
geben folgendes ein:

SET PATH=%PATH%;c:/cygwin/bin
cd c:\dev\omniORB-4.1.7\src
make export

Nun sollte das Bauen losgehen … das Bauen endete bei mit leider mit einem Fehler (LNK1123).

Fehler beheben

Folgende Dateien habe ich umbenannt (in cvtres.exe.disable)

c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe
c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

Danach wurden auch die dlls beim Linken korrekt erzeugt.

Weiter geht’s

Nochmal das Bauen anwerfen und die Bibliotheken sind da 🙂 – Siehe bin\x86_win32

Beispiele bauen

Gleich nach dem Bauen kann man die Beispiele bauen lassen:

cd examples
make export

Die Beispiele sind dann unter bin\x86_win32\ zu finden.

Beispiele ausführen

Lokales Echo

C:\dev\omniORB-4.1.7\cd bin\x86_win32\
C:\dev\omniORB-4.1.7\bin\x86_win32>eg1
I said, "Hello!".
The Echo object replied, "Hello!".

C:\dev\omniORB-4.1.7\bin\x86_win32>

Client-Server Echo

Wir benötigen ein zweites Kommandozeilen Fenster das auch auf C:\dev\omniORB-4.1.7\bin\x86_win32> zeigt.

Fenster 1:

C:\dev\omniORB-4.1.7\bin\x86_win32>eg2_impl.exe > ior.txt

Fenster 2:
Hier benötigen wir den String der in die Datei ior.txt reingeschrieben wurde. Dazu öffnet man diese am Besten mit einem Editor und kopiert den Text.

C:\dev\omniORB-4.1.7\bin\x86_win32>eg2_clt.exe IOR:01000....

Die Ausgabe sieht dann in etwa so aus:

I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".
I said, "Hello!".
The Echo object replied, "Hello!".

Fertig.
Viel Spaß!

Fragen / FAQ / Links

Für Fragen oder Anregungen bin ich jederzeit offen 🙂

Geholfen haben mir folgende Antworten auf Stackoverflow