【问题标题】:Building linuxbrew (homebrew) standalone version on Ubuntu 14.04在 Ubuntu 14.04 上构建 linuxbrew (homebrew) 独立版本
【发布时间】:2015-12-27 14:09:57
【问题描述】:

主要问题

我正在尝试在 Ubuntu 14.04.3 LTS 上构建 linuxbrew standalone installation,但原始链接中的脚本当前已损坏。我理想的答案是一个脚本,它可以一次性正确设置。我有improved the script 可以减少打嗝。

修复脚本的当前进展

在通过 linuxbrew 作为独立设置的一部分构建 gcc 时,我无法通过 crti.o 错误。但是,我找到了一些解释问题的资源:

我搜索了该文件,它就在那儿!

find -name crti.o
./.linuxbrew/lib/crti.o
./.linuxbrew/Cellar/glibc/2.19/lib/crti.o

我目前遇到crtn.o 的以下编译器错误:

/home/hbr/.linuxbrew/Cellar/binutils/2.25.1/x86_64-unknown-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
/home/hbr/.linuxbrew/Cellar/binutils/2.25.1/x86_64-unknown-linux-gnu/bin/ld: cannot find -lc
/home/hbr/.linuxbrew/Cellar/binutils/2.25.1/x86_64-unknown-linux-gnu/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status
make[3]: *** [libgcc_s.so] Error 1
make[3]: Leaving directory `/tmp/gcc20150929-3726-hif3of/gcc-5.2.0/build/x86_64-unknown-linux-gnu/libgcc'
make[2]: *** [all-stage1-target-libgcc] Error 2
make[2]: Leaving directory `/tmp/gcc20150929-3726-hif3of/gcc-5.2.0/build'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/tmp/gcc20150929-3726-hif3of/gcc-5.2.0/build'
make: *** [bootstrap] Error 2

本质上,在这一步我需要弄清楚如何确保 brew/linuxbrew/gcc 编译命令知道在哪里找到它。我尝试将它添加到the script 中的PATHLIBRARY_PATHLD_LIBRARY_PATH,但都没有任何运气。因此,必须有其他方法来确保正确设置路径并找到目标文件。有什么想法吗?

注意:我最初在this github issue 寻求帮助,但他们目前无法解决此问题。

更新

我认为在这个linuxbrew gcc formula 中可能需要一个 linuxbrew 案例,它实现了在 stackoverflow crti.o file missing 中找到的解决方案之一。

这是原homebrew gcc formula供参考。

【问题讨论】:

    标签: ubuntu installation homebrew linuxbrew


    【解决方案1】:

    我已经用解决方案更新了linuxbrew standalone installation 说明。我还创建了一个更新的linuxbrew-standalone.sh,它在 14.04 中经过测试和工作,下面在TODO cmets 中列出了一些小警告。

    # /bin/bash
    set -e
    set -u
    set -x
    
    cd $HOME
    
    # TODO: The next ln -s line breaks cross compiling with multiarch, need an alternative!
    #       source: https://stackoverflow.com/a/9004026/99379
    sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
    sudo apt-get update -y
    sudo apt-get update --fix-missing -y
    sudo apt-get install build-essential curl g++ git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev gawk make patch tcl -y
    
    unset LD_LIBRARY_PATH PKG_CONFIG_PATH HOMEBREW_CC
    PATH=$HOME/.linuxbrew/bin:/usr/local/bin:/usr/bin:/bin
    yes | ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/linuxbrew/go/install)"
    
    # hang on here. you will have to press return
    # note that even if brew doctor is a little unhappy we want to keep going
    brew doctor || true
    
    mkdir $HOME/.linuxbrew/lib
    ln -s lib $HOME/.linuxbrew/lib64
    ln -s $HOME/.linuxbrew/lib $HOME/.linuxbrew/lib64
    ln -s /usr/lib64/libstdc++.so.6 /lib64/libgcc_s.so.1 $HOME/.linuxbrew/lib/
    PATH=$HOME/.linuxbrew/lib:$PATH
    export PATH
    LIBRARY_PATH=$HOME/.linuxbrew/lib
    export LIBRARY_PATH
    LD_LIBRARY_PATH=$HOME/.linuxbrew/lib
    export LD_LIBRARY_PATH
    
    # before this, you may want to `brew edit glibc` to produce compatibility for your particular kernel, for example:
    # "--enable-version=2.6.18"
    
    #brew unlink gawk
    brew install glibc
    brew unlink glibc
    brew install https://raw.githubusercontent.com/Homebrew/homebrew-dupes/master/zlib.rb
    brew reinstall binutils
    brew link glibc
    brew install patchelf
    brew install gcc --with-glibc --only-dependencies -v
    # When tested gcc was working except for the linking step, that's why it is force-accepted with ||true
    # TODO: make it so force accepting isn't necessary and errors are shown correctly
    brew install gcc --with-glibc -v || true
    rm -f $HOME/.linuxbrew/lib/{libstdc++.so.6,libgcc_s.so.1}
    brew link gcc --overwrite
    export HOMEBREW_CC=gcc
    
    brew install bzip2 curl expat
    brew install git --with-brewed-curl --with-brewed-openssl --without-tcl-tk
    brew tap homebrew/dupes
    brew install coreutils findutils gawk gnu-sed gnu-which grep libpng libxml2 libxslt make ncurses readline
    #ln -s ncursesw/curses.h ncursesw/form.h ncursesw/ncurses.h ncursesw/term.h ncursesw/termcap.h $HOME/.linuxbrew/include/
    #ln -s libncurses.a $HOME/.linuxbrew/lib/libcurses.a
    #ln -s libncurses.so $HOME/.linuxbrew/lib/libcurses.so
    brew install ruby
    PATH=$HOME/.linuxbrew/bin:$HOME/.linuxbrew/sbin
    brew install hello && brew test hello; brew remove hello
    

    修复问题的主要线路是sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64,但这带有一个我对修复感兴趣的警告,因为它是breaks cross compiling with multiarch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2017-08-19
      • 2015-10-13
      相关资源
      最近更新 更多