This forum has been archived. Please start a new discussion on GitHub.

Ice 3.2.1 installation on FC4

Dear all,

I am installing ICE 3.2.1 in order to do some research.

I have following third party packages installed on my FC4.

GCC 4.0.0
DB4 4.3.27
expat 1.95.8
openssl 0.9.7
bzip2 1.0.2

I am getting following error.

making all in Freeze
make[2]: Entering directory `/root/Ice-3.2.1/src/Freeze'
c++ -c -I.. -I../../include -DFREEZE_API_EXPORTS -ftemplate-depth-128 -Wall -D_REENTRANT -fPIC -g EvictorI.cpp
EvictorI.cpp: In constructor ‘Freeze::EvictorI::EvictorI(const Ice::ObjectAdapterPtr&, const std::string&, DbEnv*, const std::string&, const Freeze::ServantInitializerPtr&, const std::vector<Freeze::IndexPtr, std::allocator<Freeze::IndexPtr> >&, bool)’:
EvictorI.cpp:292: error: no matching function for call to ‘Freeze::Evictor::Evictor(const void**)’
../../include/Freeze/Evictor.h:158: note: candidates are: Freeze::Evictor::Evictor()
../../include/Freeze/Evictor.h:158: note: Freeze::Evictor::Evictor(const Freeze::Evictor&)
make[2]: *** [EvictorI.o] Error 1

make[2]: Leaving directory `/root/Ice-3.2.1/src/Freeze'
make[1]: *** [all] Error 1
make[1]: Leaving directory `/root/Ice-3.2.1/src'
make: *** [all] Error 1

I have tryied ICE 3.2.1, ICE 3.2.0, ICE 3.1.1 versions, but didnt succeed. All same error.


  • Also I have updated my DB4 with

    yum update db4 --> But the version is still same.
  • bernard
    bernard Jupiter, FL
    Hi Janarbek,

    This looks like a problem with the C++ compiler. Did you try upgrading to at least GCC 4.0.1?

    Note that FC4 is quite old and we don't support this platform. You could maybe upgrade to a supported Linux distribution, or to FC7 where mefoster contributed Ice RPMs.

  • The problem is I am new to linux.

    How can I upgrade GCC?

    yum upgrade gcc is this the command? But it checks lots of dependencies and fails somewhat.

    Sorry for basic questions.
  • Another problem


    I have compiled Ice. 3.1.1 on FC6 with GCC 4.1.1

    I got following error.

    EENTRANT -fPIC -g ConnectionI.cpp
    ConnectionI.cpp:28:19; error: bzlib.h No suck file or directory
    Connection.cpp: In function std::string get BZ2Error(int):
    Connection.cpp:1863: error: :BZ RUN OK: was not declared in this scope
  • I figured out the problem.

    I am missing libbz.h file in /usr/include. I copyed it.

    But, There is also a problem because I get another error that is asking expat.h. However, I have installed expat that is working.

    is it possible to install expat and working but missing expat.h ? How can I search expat.h file location ??
  • benoit
    benoit Rennes, France

    You shouldn't copy header files in /usr/include on Fedora Core. Instead, you should install the appropriate RPM package. For the bzip2 headers, you need to install the "bzip2-devel" RPM package. For expat, you need to install the "expat-devel" RPM package (which should install /usr/include/expat.h). You should be able to find these packages on the Fedora Core web site or mirrors or your installation CDs.

    Once installed, there shouldn't have anything to configure in Ice to find this header. If this still doesn't solve your problem, please copy/paste the error message from the compiler.

  • Thank you all,

    I have done as you suggested Benoit.

    Now I have different problem.

    ../Freeze/TransactionI.h:14:20:error:db_cxx.h: No such file or directory
    ../Freeze/SharedDb.h:44: error: 'Db' has not been declared........


    I have installed Db4 which was provided by ZeroC as Third-party-packages. But still the error is same.
  • In addition,

    I have installed BerkeleyDB4.5 on /usr/local/Berkeley4.5

    I changed

    DB_HOME = /usr/local/Berkeley4.5 in /config/Make.rules.

    But the error still is same.

    I have found that db_cxx.h is in directory /usr/local/Berkeley4.5/includes/

    So what should I do?
  • bernard
    bernard Jupiter, FL
    Hi Janarbek,

    Since you're not very familiar with Linux, I recommend to try Ice on one of the Linux distributions we support:
    - RedHat Enterprise Linux 4.x (x>=4) or 5.x
    - SuSE Linux Enterprise Server 10

    You could also use the equivalent CentOS 4.x or 5.x Linux distributions.

    If this is not practical, you could pick a Linux distribution with Ice binaries already available, such as Fedora Core 7 or Fedora Core 8, or Debian.

  • Thank you very much,

    But, I think my only option is FC4 or FC6.

    Because, we have other softwares which are already installed in those machines. And I can not upgrade or change to FC7 or 8 by my own.

    I think if I solve the db_cxx.h problem in above post. I can do it.

    So can you give suggestions ?
  • bernard
    bernard Jupiter, FL
    The Berkeley DB packages available from our web sites are specific to specific Linux distributions, so I would not recommend to use them on FC4 or FC6.

    The best solution is to build Berkeley DB 4.5.20 yourself.

    ../Freeze/TransactionI.h:14:20:error:db_cxx.h: No such file or directory

    Since you've set DB_HOME properly, this suggests that you did not configure Berkeley DB with C++ support (./configure --enable-cxx).

  • I have build Berkely by myself. Here is the steps.
    What i did is

    1) I downloaded BerkeleyDB 4.5.20 from your web site.

    2) ../dist/configure -enable-cxx

    3) make

    4) make install

    In /usr/local/Berkely4.5.20 directory I have seen bin, docs, lib, include directories.

    So, As I see I did correct. But I don't know what the problem is.
  • bernard
    bernard Jupiter, FL
    If you configured and installed Berkeley DB properly, there is a file named db_cxx.h in <db install home>/include.

    For the Ice build, by default, the Ice build system looks for db_cxx.h in the default include directories (/usr/include). By setting DB_HOME in config/Make.rules, or if you prefer as an env variable, you tell the Ice build system to look for DB files somewhere else. When building Freeze with DB_HOME set, you should see in the build commands:


    That's where the C++ compiler should find db_cxx.h.

  • Thank you very much.

    That makes sense. Things are getting clear to me.

    Ok, then I can not see DB_HOME/include in my command line build messages. That means I am missiing DB_HOME/include. So how can I edit Makefile or make.rules in order to tell the comiler of location of db_cxx.h file?
  • I think

    Build command for Freeze does not include


    Here is the command.

    make[2]: Entering directory 'home/openrtm/Ice-3.1.1/src/Freeze'
    c++ -c -I.. -I../../include -DFREEZE_API_EXPERTS -ftemplate-depth-128 -Wall
    -D_REENTRANT -fPIC -g ConnectionI.cpp
    in file included from ../Freeze/ConnectionI.h:15
    from ConnectionI.cpp:10:

    ../Freeze/TransactionI.h:14:20:error:db_cxx.h: No such file or directory
    ../Freeze/SharedDb.h:44: error: 'Db' has not been declared........
  • matthew
    matthew NL, Canada
    Look in src/Freeze/Makefile. You'll find:

    include $(top_srcdir)/config/Make.rules


    DB_FLAGS is set in config/Make.rules as follows:

    # If Berkeley DB is not installed in a standard location where the
    # compiler can find it, set DB_HOME to the Berkeley DB installation
    # directory.
    #DB_HOME ?= /opt/db

    and then further down:

    ifneq ($(DB_HOME),)
    DB_FLAGS = -I$(DB_HOME)/include

    You have two choices. You can either set an environment variable DB_HOME which points at the location of your BerkeleyDB installation (export DB_HOME=wherever-you-installed-berkeleydb), or edit config/Make.rules and change the DB_HOME= line.
  • Thank you all!

    Finally, I have made it.

    I have installed Ice 3.1.1 on FC6.

    Thank you all again.