-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Linking CXX executable bin/lld FAILED: bin/lld #7
Comments
这是使用哪一个脚本产生的呢? |
bash-shell/LLVM&Clang Installer |
请问是在什么环境下执行的?(哪个发行版和版本?自带的编译器是什么版本?) 这里的文件结构因为已经被一些工具引用了所以没改。 |
ubuntu18.04,编译器用的是按您的脚本编译的GCC12,脚本放在根目录下的名字为1的文件夹里的,前面都运行好好的,编译LLVM时快结束的时候出现该错误,剩35个模块未完成 |
是不是你的本地环境安装了zstd开发包?有可能是llvm构建系统没有处理好目录查找,链接串了。 |
可以用这种方式,把新版本zstd的包含目录写进 CFLAGS 里, 把链接目录写进 LDFLAGS 里。编译GCC和编译Clang的脚本是独立的,并不太好假定一定用我的脚本编译GCC。下面使我们内部的工具链构建脚本可以参考下。 bash ./installer.sh -p "$INSTALL_PREFIX/gcc-$GCC_INSTALLER_VERSION"
if [[ -e "$INSTALL_PREFIX/gcc-latest" ]]; then
rm -rf "$INSTALL_PREFIX/gcc-latest"
fi
ln -sf "$INSTALL_PREFIX/gcc-$GCC_INSTALLER_VERSION" "$INSTALL_PREFIX/gcc-latest"
if [[ "x$LD_LIBRARY_PATH" == "x" ]]; then
export LD_LIBRARY_PATH="$TOOLS_INSTALL_PREFIX/lib64:$TOOLS_INSTALL_PREFIX/lib"
else
export LD_LIBRARY_PATH="$TOOLS_INSTALL_PREFIX/lib64:$TOOLS_INSTALL_PREFIX/lib:$LD_LIBRARY_PATH"
fi
source $INSTALL_PREFIX/gcc-latest/load-gcc-envs.sh
ALL_LDFLAGS="-L$TOOLS_INSTALL_PREFIX/lib64 -L$TOOLS_INSTALL_PREFIX/lib"
ALL_LDFLAGS="$ALL_LDFLAGS -L$GCC_HOME_DIR/lib64 -L$GCC_HOME_DIR/lib"
ALL_LDFLAGS="$ALL_LDFLAGS -L$GCC_HOME_DIR/internal-packages/lib64 -L$GCC_HOME_DIR/internal-packages/lib"
ALL_CFLAGS="-I$TOOLS_INSTALL_PREFIX/include -I$GCC_HOME_DIR/internal-packages/include"
if [[ "x$PKG_CONFIG_PATH" == "x" ]]; then
export PKG_CONFIG_PATH="$TOOLS_INSTALL_PREFIX/lib64/pkgconfig:$TOOLS_INSTALL_PREFIX/lib/pkgconfig:$GCC_HOME_DIR/internal-packages/lib64/pkgconfig:$GCC_HOME_DIR/internal-packages/lib/pkgconfig:$GCC_HOME_DIR/lib64/pkgconfig:$GCC_HOME_DIR/lib/pkgconfig"
else
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$TOOLS_INSTALL_PREFIX/lib64/pkgconfig:$TOOLS_INSTALL_PREFIX/lib/pkgconfig:$GCC_HOME_DIR/internal-packages/lib64/pkgconfig:$GCC_HOME_DIR/internal-packages/lib/pkgconfig:$GCC_HOME_DIR/lib64/pkgconfig:$GCC_HOME_DIR/lib/pkgconfig"
fi
PYTHON_INCLUDE_DIR="$(find "$GCC_HOME_DIR/include" -name Python.h)"
PYTHON_INCLUDE_DIR="$(dirname "$PYTHON_INCLUDE_DIR")"
# See https://stackoverflow.com/questions/42344932/how-to-include-correctly-wl-rpath-origin-linker-argument-in-a-makefile
GCC_RPATH_LDFLAGS="-Wl,-rpath=\$ORIGIN/../lib64:\$ORIGIN/../lib:$GCC_HOME_DIR/internal-packages/lib64:$GCC_HOME_DIR/internal-packages/lib:$GCC_HOME_DIR/lib64:$GCC_HOME_DIR/lib"
export ALL_LDFLAGS="$ALL_LDFLAGS $GCC_RPATH_LDFLAGS"
if [[ "x$LDFLAGS" == "x" ]]; then
export LDFLAGS="$GCC_RPATH_LDFLAGS"
else
export LDFLAGS="$LDFLAGS $GCC_RPATH_LDFLAGS"
fi
export ORIGIN='$ORIGIN'
# 编译其他第三方库的时候导出 env CFLAGS=$ALL_CFLAGS, 比如
# distcc
cd /opt/setup/
download_file "$DISTCC_DOWNLOAD_URL" "distcc-$DISTCC_VERSION.tar.gz"
tar -axvf "distcc-$DISTCC_VERSION.tar.gz"
cd "distcc-$DISTCC_VERSION"
env LDFLAGS="${ALL_LDFLAGS//\$/\$\$}" \
CFLAGS="$ALL_CFLAGS" ./configure --prefix=$TOOLS_INSTALL_PREFIX
env LDFLAGS="${ALL_LDFLAGS//\$/\$\$}" make -j || env LDFLAGS="${ALL_LDFLAGS//\$/\$\$}" make
env LDFLAGS="${ALL_LDFLAGS//\$/\$\$}" make install
上面不止设置了复用GCC内部使用的依赖库,还适配了pkg-config和python的查找,重设了RPATH。 |
lib/liblldELF.a(OutputSections.cpp.o):OutputSections.cpp:function void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, false> >(): 错误: 对‘ZSTD_compressStream2’未定义的引用
lib/liblldELF.a(OutputSections.cpp.o):OutputSections.cpp:function void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, false> >(): 错误: 对‘ZSTD_compressStream2’未定义的引用
lib/liblldELF.a(OutputSections.cpp.o):OutputSections.cpp:function void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)1, true> >(): 错误: 对‘ZSTD_compressStream2’未定义的引用
lib/liblldELF.a(OutputSections.cpp.o):OutputSections.cpp:function void lld::elf::OutputSection::maybeCompress<llvm::object::ELFType<(llvm::support::endianness)0, true> >(): 错误: 对‘ZSTD_compressStream2’未定义的引用
collect2: 错误:ld 返回 1
The text was updated successfully, but these errors were encountered: