Building Maidsafe on Fedora 20 - missing libicui18n.a

Hi there. I’m following the guide[1] to building Maidsafe. But I get trouble when I reach this step:

cmake .

The error message I get:

-- This system is called Linux.
-- Undefined behaviour sanitiser not available in this compiler.
================================================================================
Configuring third party projects on 'master' branch of super-project
--------------------------------------------------------------------
CMake Error at cmake_modules/add_boost.cmake:303 (message):
    For libicui18n.a, libicuuc.a & licudata.a must be installed to a standard location. on Ubuntu/Debian, run
    sudo apt-get install libicu-dev
Call Stack (most recent call first):
  src/third_party_libs/CMakeLists.txt:31 (include)

I have installed fedora’s equivilant of libicu-dev (libicu-devel), but I am unable to locate any files named “libicui18n.a”.

Does anybody have any ideas on what’s wrong here?

Thank you!

[1] Build Instructions for Linux · maidsafe-archive/MaidSafe Wiki · GitHub

This is the static library that is missing. This is used for regex due to gcc regex being incomplete (need to check 4.9 though). The missing file is the internationalised version (unicode ?). It may be called something different on fedora or in fact installed in the package you mention. Can you provide a yum list package or whatever the yum command is (sorry).

You can perhaps take a look and check the required libs to recompile boost_regex? these should satisfy your dependencies. It would be great if you could let us know the required libs for fedora and we can update the build instructions (or a pull request would be amazing).

TL;DR
If you did install boost_regex it would install the deps I believe, we do not use installed versions so this would be safe and you can comment out the check.

1 Like

Sorry for the late response.

Here’s the contents of the libicu package:

$ repoquery -q -l libicu
/usr/lib/libicudata.so.50
/usr/lib/libicudata.so.50.1.2
/usr/lib/libicui18n.so.50
/usr/lib/libicui18n.so.50.1.2
/usr/lib/libicuio.so.50
/usr/lib/libicuio.so.50.1.2
/usr/lib/libicule.so.50
/usr/lib/libicule.so.50.1.2
/usr/lib/libiculx.so.50
/usr/lib/libiculx.so.50.1.2
/usr/lib/libicutest.so.50
/usr/lib/libicutest.so.50.1.2
/usr/lib/libicutu.so.50
/usr/lib/libicutu.so.50.1.2
/usr/lib/libicuuc.so.50
/usr/lib/libicuuc.so.50.1.2
/usr/share/doc/libicu
/usr/share/doc/libicu/license.html
/usr/share/doc/libicu/readme.html
/usr/lib64/libicudata.so.50
/usr/lib64/libicudata.so.50.1.2
/usr/lib64/libicui18n.so.50
/usr/lib64/libicui18n.so.50.1.2
/usr/lib64/libicuio.so.50
/usr/lib64/libicuio.so.50.1.2
/usr/lib64/libicule.so.50
/usr/lib64/libicule.so.50.1.2
/usr/lib64/libiculx.so.50
/usr/lib64/libiculx.so.50.1.2
/usr/lib64/libicutest.so.50
/usr/lib64/libicutest.so.50.1.2
/usr/lib64/libicutu.so.50
/usr/lib64/libicutu.so.50.1.2
/usr/lib64/libicuuc.so.50
/usr/lib64/libicuuc.so.50.1.2
/usr/share/doc/libicu
/usr/share/doc/libicu/license.html
/usr/share/doc/libicu/readme.html

The contents of libicu-devel was slightly larger. Pasted here: $ repoquery -q -l libicu/usr/lib/libicudata.so.50/usr/lib/libicudata.so.50.1 - Pastebin.com

Will return with more data in a bit.

1 Like

dirvine,

I installed boost which did indeed install boost-regex but I still get the same original error.

yum provides */libicuuc.a
yum provides */licudata.a

do not return anything so it looks like those files do not exist in the normal Fedora repos . .

Phil.

Yes we need to check that out, I am too busy at the moment but appreciate anything you can do, those files must be somewhere in the repos, maybe a new package name?

OK, I got past the error by changing the lines in:

./MaidSafe/cmake_modules/add_boost.cmake

from “*.a”

to:

    find_library(Icui18nLib libicui18n.so)
    find_library(IcuucLib libicuuc.so)
    find_library(IcudataLib libicudata.so)

which allowed the make to continue until I got to another error which required:

fuse-devel

to be installed which allowed the make to finish! Now moving on to the next stuff . .

P.

After getting through the cmake stuff, make gave:

CMake Error at /home/phil/src/c++/build_maidsafe/boost_1_55_0/src/boost_system-stamp/boost_system-build.cmake:16 (message):
Command failed: 1

‘/home/phil/src/c++/build_maidsafe/boost_1_55_0_GNU_4_8_3/b2’ ‘link=static’ ‘threading=multi’ ‘runtime-link=shared’ ‘–build-dir=Build’ ‘stage’ ‘-d+2’ ‘–hash’ ‘variant=release’ ‘cxxflags=-fPIC’ ‘cxxflags=-std=c++11’ ‘-sNO_BZIP2=1’ ‘–layout=tagged’ ‘toolset=gcc-4.8’ ‘–with-system’

See also

/home/phil/src/c++/build_maidsafe/boost_1_55_0/src/boost_system-stamp/boost_system-build-*.log

So I deleted:

toolset=gcc-4.8;

from the first line of:

boost_1_55_0/src/boost_system-stamp/boost_system-build.cmake

  • now the make is proceeding . .

P.

1 Like

Had to repeat the previous exercise for a bunch of other cmake files - hopefully it might finish this time . . not quite:

[ 73%] Building CXX object src/vault/CMakeFiles/maidsafe_vault_version_handler.dir/src/maidsafe/vault/version_handler/dispatcher.cc.o
In file included from /home/phil/src/c++/MaidSafe/src/vault/src/maidsafe/vault/version_handler/dispatcher.h:30:0,
from /home/phil/src/c++/MaidSafe/src/vault/src/maidsafe/vault/version_handler/dispatcher.cc:20:
/home/phil/src/c++/MaidSafe/src/vault/src/maidsafe/vault/utils.h:25:24: fatal error: leveldb/db.h: No such file or directory
#include “leveldb/db.h”

  • looks like I am stuck on this one . . it doesn’t appear to be something I can fix . .

P.

I am pretty sure this is not the next branches, leveldb was removed a few weeks ago. Can you please check you are on next. (git status)

git status
On branch next
Your branch is up-to-date with ‘origin/next’.

Just to be sure you could try…

git submodule foreach “git checkout next; git pull”
git checkout next; git pull
cd ~/build_maidsafe
cmake …/MaidSafe
make

Still seems to say everything is up to date with next - why did you think that might give a different result?

P.

We use submodules so the main repo (MaidSafe) may be on next but all subprojects may not be. the submodule command works, or you cna do other stuff like submodule update etc. We really should get master synchronised with every testnet, its just we are going like mad and miss this out sometimes. We will get Qa to make sure master is synced properly and tagged with testnet number.

OK, thanks. So is there anything else I can do now? or should I wait till you have time to get back to it?

P.

If you have leveldb messages then it would seem that is not next, unsure but sometimes you may need to delete the CmakeCache.txt file and run cmake again. Defo if you see leveldb then its wrong.

I started from scratch with the git clone and init commands, did the the Fedora cmake changes but I still get the leveldb error at 73% on the make. It looks like the leveldb stuff is still there to me . .

I will have another look tomorrow if I get time.

P.

BTW, when I do “git status” the full result is:

On branch next
Your branch is up-to-date with ‘origin/next’.

Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)
(commit or discard the untracked or modified content in submodules)

modified:   cmake_modules/add_boost.cmake
modified:   src/vault (modified content)

no changes added to commit (use “git add” and/or “git commit -a”)

P.