Can't build waffles on CentOS 6.4 64bit

Help
XiaoboGu
2013-09-21
2013-09-30
  • XiaoboGu

    XiaoboGu - 2013-09-21

    Hi,

    I am trying to build Waffles on CentOS6.4 64 bit, I have changed the Makefile under src to
    export INSTALL_LOCATION_LIB="/opt/waffles/lib"
    export INSTALL_LOCATION_INCLUDE="/opt/waffles/include"
    export INSTALL_LOCATION_BIN="/opt/waffles/bin"

    The sudo make install command failed with this:

    [root@lix src]# sudo make install
    make -C GClasses install
    make[1]: Entering directory /home/amber/soft/waffles/src/GClasses' make: Entering directory/home/amber/soft/waffles/src/GClasses'
    rm -f ../../lib/GClassesDbg.a
    make: No rule to make target ../../obj/GClasses/dbg/G3D.o', needed by../../lib/GClassesDbg.a'. Stop.
    make: Leaving directory /home/amber/soft/waffles/src/GClasses' make[1]: *** [install] Error 2 make[1]: Leaving directory/home/amber/soft/waffles/src/GClasses'
    make:
    [INSTALL_GClasses] Error 2
    [root@lix src]#

    And I do issue make clean before this.

     
  • Mike Gashler

    Mike Gashler - 2013-09-23

    The rule to make that target is located in waffles/obj/GClasses/dbg/G3D.d. Does this file exist on your machine? The contents of this file should be generated to be something like this:

    ../../obj/GClasses/dbg/G3D.o: G3D.cpp G3D.h GError.h GRand.h GDom.h GHeap.h GMath.h GImage.h \ GVec.h
    g++ -Wall -g -D_DEBUG -c G3D.cpp -o ../../obj/GClasses/dbg/G3D.o

     
  • XiaoboGu

    XiaoboGu - 2013-09-23

    No, even the obj directory is not created by make.

     
  • XiaoboGu

    XiaoboGu - 2013-09-23

    I issue the command under waffles/src directory.

     
  • Mike Gashler

    Mike Gashler - 2013-09-23

    Oh, I know what the problem is! I recently added some lines to the Makefile to prevent it from building as root. The reason for this change is because it is common to build and install Waffles with a single command:

    sudo make install

    but it is problematic if the object files are owned by root, because then the normal user cannot easily delete them, and they will prevent future compiles from completing successfully. So, the Makefile switches to ${SUDO_USER} to do the compilation.

    In your case, however, ${SUDO_USER} is root, so it never switches to any user besides root, so it never builds the files at all. If you become any other user before you build, it should work as expected.

    Anyone know a better solution to this issue?

     
  • XiaoboGu

    XiaoboGu - 2013-09-24

    The following step works:
    1. add my normal user amber to sudoers
    2. chown -R amber /home , (without this step I get permission denied error)
    3. sudo make install under $waffles_root/src

     
  • XiaoboGu

    XiaoboGu - 2013-09-24

    But there is another problem, after the sudo make install command finished,

    the binaries under $waffles_root/bin are not copied to the installation target path, which is specified in the Makefile as "export INSTALL_LOCATION_BIN="/opt/waffles/bin"
    but the executeable file called bin is created under /opt/waffles, and the output of ./opt/waffles/bin is


    Expected a command

    waffles_transform [command]
    add [dataset1] [dataset2]
    addindexcolumn [dataset] <options>
    addnoise [dataset] [dev] <options>
    aggregatecols [n]
    aggregaterows [n]
    align [a] [b]
    autocorrelation [dataset]
    cholesky [dataset]
    correlation [dataset] [attr1] [attr2] <options>
    cumulativecolumns [dataset] [column-list]
    determinant [dataset]
    discretize [dataset] <options>
    dropcolumns [dataset] [column-list]
    drophomogcols [dataset]
    dropiftooclose [dataset] [col] [gap]
    dropmissingvalues [dataset]
    droprandomvalues [dataset] [portion] <options>
    dropunusedvalues [dataset]
    export [dataset] <options>
    droprows [dataset] [after-size]
    fillmissingvalues [dataset] <options>
    import [dataset] <options>
    enumeratevalues [dataset] [col]
    keeponlycolumns [dataset] [column-list]
    measuremeansquarederror [dataset1] [dataset2] <options>
    mergehoriz [dataset1] [dataset2]
    mergevert [dataset1] [dataset2]
    multiply [a] [b] <options>
    multiplyscalar [dataset] [scalar]
    normalize [dataset] <options>
    normalizemagnitude [dataset]
    nominaltocat [dataset] <options>
    obfuscate [data]
    overlay [base] [over]
    powercolumns [dataset] [column-list] [exponent]
    prettify [json-file]
    pseudoinverse [dataset]
    reducedrowechelonform [dataset]
    rotate [dataset] [col_x] [col_y] [angle_degrees]
    samplerows [dataset] [portion]
    scalecolumns [dataset] [column-list] [scalar]
    shiftcolumns [dataset] [column-list] [offset]
    shuffle [dataset] <options>
    significance [dataset] [attr1] [attr2] <options>
    sortcolumn [dataset] [col] <options>
    split [dataset] [rows] [filename1] [filename2] <options>
    splitclass [data] [attr] <options>
    splitfold [dataset] [i] [n] <options>
    squareddistance [a] [b]
    svd [matrix] <options>
    swapcolumns [dataset] [col1] [col2]
    transition [action-sequence] [state-sequence] <options>
    threshold [dataset] [column] [threshold]
    transpose [dataset]
    uglify [json-file]
    zeromean [dataset]
    usage

    For more specific usage information, enter as much of the command as you know.

    To see full usage information, run:
    bin usage

    For a graphical tool that will help you to build a command, run:
    waffles_wizard
    [amber@cent64 waffles]$

     
  • XiaoboGu

    XiaoboGu - 2013-09-24

    And there are errors when run the test programe

    waffles_transform mergevert FAILED!!!
    need a bigger buffer

    waffles_recommend fillmissingvalues FAILED!!!
    need a bigger buffer

    waffles_transform keeponlycolumns FAILED!!!
    Substring match test failed: Unexpected output from golf dataset with no columns listed

    waffles_dimred attributeselector FAILED!!!
    Test for equality failed: Unexpected output from golf dataset with no labels and no ignored

    document classification FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    Error calling execvp. errno=2

    Done.
    FAILED!!!
    failed

    Done.

     
  • Mike Gashler

    Mike Gashler - 2013-09-24

    The "test" application expects the waffles binaries (waffles_transform, waffles_learn, etc.) to be installed in a location contained in the $PATH environment variable. The errors above are due to it not being able to find them. These error messages definitely do not identify the problem very well, so I will try to improve them.

    The issue regarding the installation location must have something to do with the Makefiles. Unfortunately, I am not very good with Gnu Make, so I cannot immediately identify what needs to be fixed.

     
  • XiaoboGu

    XiaoboGu - 2013-09-24

    Another question, why do we have to use sudo users, why not just use the plain user account?

     
  • Anonymous - 2013-09-24

    You can do "make dbg" or "make opt" as any user. "make install", however, requires sudo because, by default, it copies the binaries to /usr/local/bin, which is usually owned by root.

    I think this aspect of our Makefiles is not currently very well designed. I am open to any suggestions about how to make them better.

     
  • XiaoboGu

    XiaoboGu - 2013-09-29

    You'd better add an "all" target in the Makefile, that's the default target when user can just iusse make to make all the staff.

     
  • XiaoboGu

    XiaoboGu - 2013-09-29

    The disadvantage of using sudo user account is that:

    I can't build Waffles inside Eclipse for C++

    * Build of configuration Default for project Waffles *

    make all
    make -C GClasses install
    make[1]: Entering directory /home/amber/soft/waffles/src/GClasses' You must use sudo to install make[1]: *** [install] Error 1 make: *** [INSTALL_GClasses] Error 2 make[1]: Leaving directory/home/amber/soft/waffles/src/GClasses'

     
  • Mike Gashler

    Mike Gashler - 2013-09-30

    I think you can use "make dbg" with Eclipse instead of "sudo make install". Eclipse does not need the binaries to be copied to the /use/local/bin folder.

    It is not clear to me whether "make all" should be the same as "make dbg" or "make opt". Is it expected to build with debug symbols, or to make optimized binaries?

     


Anonymous

Cancel  Add attachments