MIDL generates error when compiling samples

System:
Fedora Core 4
GCC 3.2

The error (when trying to make ‘basic’ in the dcom samples):

midl : error MIDL2120 : error loading library libole32.so

Below is the command causing the error, and an strace to go along with it. Note that originally the strace showed that midl was looking for stdole32.tlb and couldn’t find it, so I moved it to one of the locations it was looking for it in, the resulting error was the same though. Any ideas?

make[1]: Entering directory /opt/sag/exx/v721/examples/dcom/basic/proxy/unix' makefile:45: target obj/i686_linux_libc6/basicps_def.o’ doesn’t match the target pattern
midl -char unsigned -ms_ext -c_ext -Os -DSAG_COM=1 -DCE_TLINUX86 -D_REENTRANT -D_POSIX_MAPPED_FILES -D_GNU_SOURCE -DCOOL_LINUX_COMPILER_H=1 -D_WIN32 -DWIN32=100 -D_WIN32_WINNT=0x400 -DINC_OLE2 -DFLAT -DUNICODE -DWIN32_LEAN_AND_MEAN -D_POSIX_MAPPED_FILES -DSECURITY_ENABLED=1 -D_WCHAR_T_DEFINED -I. -I… -I/opt/sag/exx/v721/include -out obj/i686_linux_libc6 -tlb /opt/sag/exx/v721/examples/lib/basic.tlb …/basic.idl
Microsoft/Software AG ® MIDL Compiler Version 5.03.0279, Software AG internal version 38
Copyright © Microsoft Corp/Software AG 1991-2005. All rights reserved.
Processing …/basic.idl
Processing /opt/sag/exx/v721/include/unknwn.idl
Processing /opt/sag/exx/v721/include/wtypes.idl
…/basic.idl(25) : warning MIDL2346 : the specified lcid is different from previous specification
Processing /opt/sag/exx/v721/include/oaidl.idl
Processing /opt/sag/exx/v721/include/objidl.idl
midl : error MIDL2120 : error loading library libole32.so

strace:
1849 read(11, " [in,out] PVOID pvD"…, 16384) = 1870
1849 brk(0x9093000) = 0x9093000
1849 read(11, “”, 16384) = 0
1849 close(11) = 0
1849 unlink("/tmp/MIDLwSt70O-1849") = 0
1849 access("./stdole32.tlb", F_OK) = 0
1849 write(1, “midl : error MIDL2120 : error lo”…, 58) = 58
1849 munmap(0x8b0000, 4096)

Hello,

please note that we have tested and officially support RedHat and SuSE distributions. We have not tested Fedora.

However, if you have installed the correct environment (gcc, binutils), it should also be possible to run on Fedora.

Therefore I like to ask some questions:

  • Have you set environment variable $SAG to the installation dir (usually /opt/sag)?
  • Have you sourced the EntireX environment file $EXXDIR/$EXXVERS/INSTALL/exxenv?
  • Are all libraries resolved if you type “ldd libole32.so”?
  • Can you run the sclient/sserver example in $EXXDIR/$EXXVERS/INSTALL/DCOverify after registering “sserver -r”?
  • Can you compile the mssimple example (this is the sclient / sserver example) in $EXXDIR/$EXXVERS/examples/dcom/mssimple? Here you don’t need MIDL.

Regards,
Volker Denkhaus

Answers to your questions:

  • Have you set environment variable $SAG to the installation dir (usually /opt/sag)?
    yes

  • Have you sourced the EntireX environment file $EXXDIR/$EXXVERS/INSTALL/exxenv?
    yes

  • Are all libraries resolved if you type “ldd libole32.so”?
    yes

  • Can you run the sclient/sserver example in $EXXDIR/$EXXVERS/INSTALL/DCOverify after registering “sserver -r”?
    I can run it bur I receive this error
    #S# sserver: CoRegisterClassObject failed (800706ba / 1722)

  • Can you compile the mssimple example (this is the sclient / sserver example) in $EXXDIR/$EXXVERS/examples/dcom/mssimple? Here you don’t need MIDL.
    yes

Additionally, I have succesfully compiled the RPC hello program and it works fine.

Hello,

so it looks like you try to prestart sserver and you get this error?
That looks like the process rpcss is not running. After starting the DCOM environment (i.e. “ntwopper -v ntd”), there should be three processes running: ntd, rpcss and paulad. If that is not the case, then there is a severe problem. You can also use “sermon obj” to see, which processes have connected to ntd. I recommend to do the following: Before starting the DCOM environment, please set the environment variable COOL_PRIV_PROCS to the value “all”. The start “ntwopper -v ntd”. Check if rpcss and paulad are running. If not, just try to start rpcss on the command line. Maybe this process can’t start either due to a problem with libole32.so.
Have you ever tried to install/run this on SuSE or RedHat (one of our supported platforms)?

Regards,
Volker Denkhaus

Actually rpcss is up and running fine. Sermon obj lists a bunch of stuff, but I still get
#S# sserver: CoInitializeEx …
#S# sserver: Security enabled…
#S# sserver: CoRegisterClassObject …
#S# sserver: CoRegisterClassObject failed (8007000e / 14)

Here’s the thing - I don’t think there is a problem with the libole32.so - the program never even tries to open it (look at the strace). I think there is another problem and the error message is incorrect.

-b

Hello,

from your emails below, I see that you now get a different error code.
First it was #S# sserver: CoRegisterClassObject failed (800706ba / 1722)
Now it is #S# sserver: CoRegisterClassObject failed (8007000e / 14).

This looks really strange. I know a situation when this error occurs. This is usually if the library libsecurity.so couldn’t be found. But if you have executed a regular installation, this library should be there.

The whole thing looks quite strange. After a succeful installation, the basic tests have to work. So I guess, either we have a special problem with this Fedora distribution (as I mentioned, we haven’t tested on Fedora), or you installation is corrupted or hasn’t finished succesful (which might also be a problem of the Fedora distribution).
What is the version of gcc, binutils and libstdc++ shipped with this Fedora distribution. The DCOM version you’ve downloaded needs gcc 3.3, binutils 2.14.90 and libstdc++ version 5. Do you have all this prerequisites?

Can you do a second installation on a SuSe 9 or RedHat 3? These are the distributions we’ve tested.

You could also try to create a logfile. I do not know if this would help us in this situation, but it is worth a try.
Please shut down the environment with command “sermon shut”. Then set the following environment variables: COOL_LOGLEVEL to value 166 and specify a logfile with variable COOL_LOGFILE. Start “ntwopper -v ntd” and try to register sserver. After the test, shut down the environment again and please send me the logfile.

Regards,
Volker Denkhaus

Hello,

there could also be a different problem. For SuSE there is a packet called “wine” which also inlcudes a libole32.so. Dependend on the LD_LIBRARY_PATH it could be that the wrong libole32.so is loaded and this will result in failures.
So, please check if you have installed a similar packet on your Fedora installation.

Regards,
Volker Denkhaus