Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

HipHop on CentOS installation with Dwarf, libwarf & elfwriter.cpp error

Posted on 2013-11-12
9
Medium Priority
?
1,275 Views
Last Modified: 2013-11-13
Dear Experts,

I have been trying to install Hiphop (VM) on my VPS linux-64 Centos server during
the whole week and overcame a lot of installation issues.
Now at  latest stage of my installation is finished closing to  72%  
from make command  at the final step in which  the error is echo out as follows
about "elfwrite.cpp.o" related to Dwarf and /usr/include/libdwarf library.

After I have re-installed all third-party lib again about

1-yum install  elfutils-libelf-devel
2- install libdwarf based on other website suggestion
3- install libelf based on other website suggestion

And then re-do  the following command:
export CC=gcc
export CMAKE_PREFIX_PATH=`pwd`/local
cd hiphop-php
 git submodule init
git submodule update
export HPHP_HOME=`pwd`
export HPHP_LIB=`pwd`/bin
cmake .
make

That it is still echo out the same error about elfwriter.cpp, please help
me to overcome this error if you are familar with hiphop installation and
I am appreciated your help.

Below I will attach my shell script and error outout

Error out for elfwriter.cpp on Line 57 and 63
root@vps [/home/dev/hiphop]# cd hiphop-php
root@vps [/home/dev/hiphop/hiphop-php]# make
[  3%] Built target folly
[  4%] Built target double-conversion
[  4%] Built target gen-class-map
[  4%] Built target gen-ext-hhvm
[  5%] Built target gen-infotabs
[  5%] Built target afdt
[ 12%] Built target mbfl
[ 12%] Built target sqlite3
[ 13%] Built target timelib
[ 13%] Built target lz4
[ 16%] Built target hphp_thrift
[ 17%] Built target hphp_proxygen
[ 18%] Built target vixl
[ 19%] Built target neo
[ 19%] Built target hphp_parser
[ 20%] Built target hphp_zend
[ 25%] Built target hphp_util
[ 25%] Built target hphp_system
[ 26%] Built target hphp_hhbbc
[ 35%] Built target hphp_analysis
[ 35%] Building CXX object hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o
In file included from /home/dev/hiphop/local/include/boost/interprocess/sync/interprocess_mutex.hpp:31:0,
                 from /home/dev/hiphop/local/include/boost/interprocess/sync/interprocess_upgradable_mutex.hpp:22,
                 from /home/dev/hiphop/hiphop-php/hphp/util/base.h:60,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/base/types.h:20,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.h:19,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp:16:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/mutex.hpp: In member function ‘void boost::interprocess::ipcdetail::posix_mutex::unlock()’:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/mutex.hpp:141:8: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
    int res = 0;
        ^
In file included from /home/dev/hiphop/local/include/boost/interprocess/sync/interprocess_condition.hpp:30:0,
                 from /home/dev/hiphop/local/include/boost/interprocess/sync/interprocess_upgradable_mutex.hpp:23,
                 from /home/dev/hiphop/hiphop-php/hphp/util/base.h:60,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/base/types.h:20,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.h:19,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp:16:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp: In destructor ‘boost::interprocess::ipcdetail::posix_condition::~posix_condition()’:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp:146:9: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
     int res = 0;
         ^
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp: In member function ‘void boost::interprocess::ipcdetail::posix_condition::notify_one()’:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp:153:9: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
     int res = 0;
         ^
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp: In member function ‘void boost::interprocess::ipcdetail::posix_condition::notify_all()’:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp:160:9: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
     int res = 0;
         ^
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp: In member function ‘void boost::interprocess::ipcdetail::posix_condition::do_wait(boost::interprocess::ipcdetail::posix_mutex&)’:
/home/dev/hiphop/local/include/boost/interprocess/sync/posix/condition.hpp:168:8: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
    int res = 0;
        ^
/home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp: In member function ‘bool HPHP::Debug::ElfWriter::initDwarfProducer()’:
/home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp:106:11: error: invalid conversion from ‘int (*)(char*, int, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Unsigned*, Dwarf_Ptr, int*) {aka int (*)(char*, int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int*, void*, int*)}’ to ‘Dwarf_Callback_Func_c {aka int (*)(const char*, int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int*, void*, int*)}’ [-fpermissive]
     &error);
           ^
In file included from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/dwarf.h:23:0,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.h:20,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp:16:
/usr/include/libdwarf.h:2294:15: error:   initializing argument 2 of ‘Dwarf_P_Debug_s* dwarf_producer_init_c(Dwarf_Unsigned, Dwarf_Callback_Func_c, Dwarf_Handler, Dwarf_Ptr, void*, Dwarf_Error_s**)’ [-fpermissive]
 Dwarf_P_Debug dwarf_producer_init_c(
               ^
In file included from /home/dev/hiphop/local/include/boost/filesystem/path_traits.hpp:23:0,
                 from /home/dev/hiphop/local/include/boost/filesystem/path.hpp:25,
                 from /home/dev/hiphop/local/include/boost/filesystem/operations.hpp:25,
                 from /home/dev/hiphop/hiphop-php/hphp/util/base.h:63,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/base/types.h:20,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.h:19,
                 from /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp:16:
/home/dev/hiphop/local/include/boost/system/error_code.hpp: At global scope:
/home/dev/hiphop/local/include/boost/system/error_code.hpp:214:36: warning: ‘boost::system::posix_category’ defined but not used [-Wunused-variable]
     static const error_category &  posix_category = generic_category();
                                    ^
/home/dev/hiphop/local/include/boost/system/error_code.hpp:215:36: warning: ‘boost::system::errno_ecat’ defined but not used [-Wunused-variable]
     static const error_category &  errno_ecat     = generic_category();
                                    ^
/home/dev/hiphop/local/include/boost/system/error_code.hpp:216:36: warning: ‘boost::system::native_ecat’ defined but not used [-Wunused-variable]
     static const error_category &  native_ecat    = system_category();
                                    ^
make[2]: *** [hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o] Error 1
make[1]: *** [hphp/runtime/CMakeFiles/hphp_runtime_static.dir/all] Error 2
make: *** [all] Error 2

Open in new window



HipHop Installation shell script on linux-x86-64-CentOS:

#!/bin/bash
cd hiphop
git clone git://github.com/facebook/hiphop-php.git
wget "http://downloads.sourceforge.net/project/re2c/re2c/0.13.5/re2c-0.13.5.tar.gz?use_mirror=cdnetworks-us-2"
cp /home/dev/tbb40_20120613oss_src.tgz .
#wget "http://www.threadingbuildingblocks.org/uploads/77/142/2.2/tbb22_20090809oss_src.tgz"
wget "http://curl.haxx.se/download/curl-7.20.0.tar.bz2"
wget "http://www.monkey.org/~provos/libevent-1.4.14-stable.tar.gz"
wget "http://launchpad.net/libmemcached/1.0/0.48/+download/libmemcached-0.48.tar.gz"
wget "http://download.icu-project.org/files/icu4c/4.6.1/icu4c-4_6_1-src.tgz"
wget "http://www.geocities.jp/kosako3/oniguruma/archive/onig-5.9.2.tar.gz"
#wget "http://downloads.sourceforge.net/project/boost/boost/1.46.1/boost_1_46_1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fboost%2Ffiles%2Fboost%2F1.46.1%2F&use_mirror=ignum"
cp /home/dev/boost_1_50_0.tar.gz .
wget "http://php.webtutor.pl/wp-content/uploads/2011/04/libcclient2007-devel.tar.gz"
cp /home/dev/libelf-0.8.9.tar.gz .
tar xf libelf-0.8.9.tar.gz
cd libelf-0.8.9
./configure --prefix=../local
make -j 8
make install
cd ..

tar xvjf curl-7.20.0.tar.bz2
tar xvzf libevent-1.4.14-stable.tar.gz
tar xvzf re2c-0.13.5.tar.gz
tar xvzf tbb40_20120613oss_src.tgz
tar xvzf libmemcached-0.48.tar.gz
tar xvzf icu4c-4_6_1-src.tgz
tar xvzf onig-5.9.2.tar.gz
tar xvzf boost_1_50_0.tar.gz
tar xvzf libcclient2007-devel.tar.gz

export CC=gcc
export CMAKE_PREFIX_PATH=`pwd`/local
git clone git://libdwarf.git.sourceforge.net/gitroot/libdwarf/libdwarf
cd libdwarf/libdwarf
./configure
make
sudo cp libdwarf.a /usr/lib64/
sudo cp libdwarf.h /usr/include/
sudo cp dwarf.h /usr/include/
cd ../..

cd tbb40_20120613oss
gmake
cp -Rp include/tbb/ /usr/include/
cp `pwd`/build/*_release/*.so /usr/lib/
cp `pwd`/build/*_release/*.so.2 /usr/lib/
ldconfig
cd ..

cd re2c-0.13.5
./configure --prefix=`pwd`/../local
make install
cd ..

cd libevent-1.4.14-stable
cp ../hiphop-php/src/third_party/libevent-1.4.14.fb-changes.diff .
patch < libevent-1.4.14.fb-changes.diff
./configure --prefix=`pwd`/../local
make install
cd ..

cd curl-7.20.0
cp ../hiphop-php/src/third_party/libcurl.fb-changes.diff .
patch -p1 < libcurl.fb-changes.diff
./configure --prefix=`pwd`/../local
make install
cd ..

cd libmemcached-0.48
./configure --prefix=`pwd`/../local
make install
cd ..

cd icu/source
./configure --prefix=`pwd`/../../local
make install
cd ../..

cd onig-5.9.2
./configure --prefix=`pwd`/../local
make install
cd ..

cd boost_1_50_0
./bootstrap.sh --prefix=`pwd`/../local --libdir=`pwd`/../local/lib
./bjam --layout=system install
export Boost_LIBRARYDIR=`pwd`/../local/include/boost/
cd ..
ldconfig
cp -r imap local/include/
cp /usr/lib/libc-client.so.2007 local/lib/libc-client.so

cd hiphop-php
git submodule init
git submodule update
export HPHP_HOME=`pwd`
export HPHP_LIB=`pwd`/bin
cmake .
make

Open in new window

0
Comment
Question by:duncanb7
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 3
9 Comments
 
LVL 35

Expert Comment

by:sarabande
ID: 39641331
it actually is not an installation issue but compile warnings and errors.

the warnings you may ignore (or try to get rid of them by providing compiler flags with the CC that would ignore the warnings).

but the error "invalid conversion from ..." in HPHP::Debug::ElfWriter::initDwarfProducer()’ is severe. here the function tries to assign a function pointer which has a 'char *' as first argument but where a 'const char *' is required. the problem only can be solved in the source beside you could make that the installation builds a release version instead of a debug version. the release build not necessarily has the same issue as the function seems to be a debug only function. same applies for the next error "error: initializing argument 2 of ‘Dwarf_P_Debug_s* dwarf_producer_init_c ..." which obviously also is in a debug function only.

I don't know how to switch from debug to release build but you may look in the 'makefile' of folder libdwarf/libdwarf whether it can be used fro release build. or, you skip the build in the installation and do a manual build after installation where you could solve the issues in the source code.

Sara
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39641390
Are you succesfully to install hiphop on your server before, what is your server
you used ?

There is three files need to copy  as follow commands
sudo cp libdwarf.a /usr/lib64/
sudo cp libdwarf.h /usr/include/
sudo cp dwarf.h /usr/include/

As you said, it seems the error is  from libdawrf.h and elfwriter.cpp ?
RIght? How to fix the file by editing inside of file.

I attached file for your review,  please help on it.
elfwriter.cpp
libdwarf.h
elfwriter.h
0
 
LVL 35

Accepted Solution

by:
sarabande earned 2000 total points
ID: 39641819
the function ElfWriter::initDwarfProducer() passes a function pointer g_dwarfCallback to another function. this call back function seems to have a wrong signature what leads to the error. you should looking in the sources where the g_dwarfCallback was defined (perhaps in elfwriter.h).

I cannot install the hiphop as I don't have the right environment. but I can help you with compilation errors. probably the easiest would be if you skip the build (and the copying of the build results) in the installation script. the installation then would succeed and we could start the build manually and do the necessary changes in the source code directly.

alternatively post the makefile and I check how the release build could be called from script. if you are lucky, the build would work for release.

Sara
0
Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

 
LVL 13

Author Comment

by:duncanb7
ID: 39641853
Attached file.




Please advise and appreciated your help
Makefile
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39641936
[ 35%] Built target hphp_analysis
[ 35%] Building CXX object hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o


Last makefile may not be correct
I resend the file Makefile from hphp/runtime/  directory that
is exact file for running for elfwriter.cpp on

line 8362
Makefile
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39642480
Dear sarabande

thanks for your reply above, please don't look at the Makefile I attached
that is not the right one.

And finally I found the Makefile in which I delete all code
about elfwriter.cpp, and let the hiphop installation to continue without
interuption from error by elfwriter.cpp. Now the installation is almost
finished in 99%  without elfwriter.cpp


The Makefile will include other Makefile2 and build and depend on build.make
and depend.make respectively. In build.make, I deteleted  all related elfwriter code
as follow in code area. it will aslo do similar work for dwarf.cpp and debug.cpp

hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o: hphp/runtime/CMakeFiles/hphp_runtime_static.dir/flags.make
hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o: hphp/runtime/vm/debug/elfwriter.cpp
       $(CMAKE_COMMAND) -E cmake_progress_report /home/dev/hiphop/hiphop-php/CMakeFiles $(CMAKE_PROGRESS_406)
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Building CXX object hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o"
       cd /home/dev/hiphop/hiphop-php/hphp/runtime && /usr/local/bin/c++   $(CXX_DEFINES) $(CXX_FLAGS) -o CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o -c /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp

hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.i: cmake_force
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.i"
       cd /home/dev/hiphop/hiphop-php/hphp/runtime && /usr/local/bin/c++  $(CXX_DEFINES) $(CXX_FLAGS) -E /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp > CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.i

hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.s: cmake_force
       @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.s"
       cd /home/dev/hiphop/hiphop-php/hphp/runtime && /usr/local/bin/c++  $(CXX_DEFINES) $(CXX_FLAGS) -S /home/dev/hiphop/hiphop-php/hphp/runtime/vm/debug/elfwriter.cpp -o CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.s


# Object files for target hphp_runtime_static
hphp_runtime_static_OBJECTS = \
"CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o" \

# External object files for target hphp_runtime_static
hphp_runtime_static_EXTERNAL_OBJECTS =
hphp/runtime/libhphp_runtime.a: hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o

# Rule to build all files generated by this target.
hphp/runtime/CMakeFiles/hphp_runtime_static.dir/build: hphp/runtime/libhphp_runtime.a
.PHONY : hphp/runtime/CMakeFiles/hphp_runtime_static.dir/build

hphp/runtime/CMakeFiles/hphp_runtime_static.dir/requires: hphp/runtime/CMakeFiles/hphp_runtime_static.dir/vm/debug/elfwriter.cpp.o.requires

Open in new window

I will continue to go the only elfwriter.cpp  and compiler it as single standalone CPP file
(with its include file)  first to see what error that will reduce debugger time.

Please bring out any suggestion that I can try and test that I will be appreicated

Duncan
0
 
LVL 13

Author Comment

by:duncanb7
ID: 39644224
Dear sarabande,

g_dwarfCallback call another function of Dwarf_Callback_Func_c
in which I change it from const char * to char * on line 26 in code area, and then
elfwriter.cpp error is gone and thanks for your suggestion, and  installation is continuing now and waiting for final result, hope no more error


Dunan

bool ElfWriter::initDwarfProducer() {
  Dwarf_Error error = 0;
  /* m_dwarfProducer is the handle used for interaction for libdwarf */
  m_dwarfProducer = dwarf_producer_init_c(
    DW_DLC_WRITE | DW_DLC_SIZE_64 | DW_DLC_SYMBOLIC_RELOCATIONS,
    g_dwarfCallback,
    nullptr,
    nullptr,
    reinterpret_cast<Dwarf_Ptr>(this),
    &error);
  if (m_dwarfProducer == reinterpret_cast<Dwarf_P_Debug>(DW_DLV_BADADDR)) {
    logError("Unable to create dwarf producer");
    return false;
  }
  return true;
}
Dwarf_P_Debug dwarf_producer_init_c(
    Dwarf_Unsigned        /*flags*/,
    Dwarf_Callback_Func_c /*func*/,
    Dwarf_Handler         /*errhand*/,
    Dwarf_Ptr             /*errarg*/,
    void *                /*user_data*/,
    Dwarf_Error *         /*error*/);
	
typedef int (*Dwarf_Callback_Func_c)(
    const char*     /*name*/,
    int             /*size*/,
    Dwarf_Unsigned  /*type*/,
    Dwarf_Unsigned  /*flags*/,
    Dwarf_Unsigned  /*link*/,
    Dwarf_Unsigned  /*info*/,
    Dwarf_Unsigned* /*sect_name_index*/,
    void *          /*user_data*/,
    int*            /*error*/);
extern int g_dwarfCallback(char *name, int size, Dwarf_Unsigned type,
  Dwarf_Unsigned flags, Dwarf_Unsigned link, Dwarf_Unsigned info,
  Dwarf_Unsigned *sect_name_index, Dwarf_Ptr handle, int *error);	

Open in new window

0
 
LVL 13

Author Closing Comment

by:duncanb7
ID: 39644262
Thanks for your suggestion and elfwriter error is gone
0
 
LVL 35

Expert Comment

by:sarabande
ID: 39644314
great. good luck.

Sara
0

Featured Post

How Blockchain Is Impacting Every Industry

Blockchain expert Alex Tapscott talks to Acronis VP Frank Jablonski about this revolutionary technology and how it's making inroads into other industries and facets of everyday life.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Fine Tune your automatic Updates for Ubuntu / Debian
This article discusses how to implement server side field validation and display customized error messages to the client.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question