Solved

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

Posted on 2013-11-12
9
1,201 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
  • 6
  • 3
9 Comments
 
LVL 32

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 32

Accepted Solution

by:
sarabande earned 500 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
 
LVL 13

Author Comment

by:duncanb7
ID: 39641853
Attached file.




Please advise and appreciated your help
Makefile
0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 
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 32

Expert Comment

by:sarabande
ID: 39644314
great. good luck.

Sara
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Setting up Secure Ubuntu server on VMware 1.      Insert the Ubuntu Server distribution CD or attach the ISO of the CD which is in the “Datastore”. Note that it is important to install the x64 edition on servers, not the X86 editions. 2.      Power on th…
I. Introduction There's an interesting discussion going on now in an Experts Exchange Group — Attachments with no extension (http://www.experts-exchange.com/discussions/210281/Attachments-with-no-extension.html). This reminded me of questions tha…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

757 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

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now