- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你能(合理地)让 Fedora 21 达到只有 llvm/clang/libc++/libc++abi 的水平吗? (我发现有些东西表明没有,但它们都大约 3 岁了,从那时起 llvm/clang 已经走了很长一段路。)
我尝试了全新安装
yum install gcc gcc-c++
(downloaded, built, installed llvm/cfe(clang)/compiler-rt/libcxx/libcxxabi from svn)
yum remove gcc gcc-c++
added to /etc/profile: export CC=/usr/local/bin/clang \ export CXX=/usr/local/bin/clang++
(in case of hard wiring)
ln -s /usr/local/bin/clang /usr/local/bin/gcc
ln -s /usr/local/bin/clang /usr/local/bin/cc
ln -s /usr/local/bin/clang++ /usr/local/bin/g++
ln -s /usr/local/bin/clang++ /usr/local/bin/c++
ldconfig
我很高兴,然后去构建一些东西,我得到了:
ld: cannot find crtbegin.o
ld: cannot find -lgcc
ld: cannot find -lgcc_s
clang -v 包括
Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.9.2
ldconfig && ldconfig -p | grep libgcc 显示
libgcc_s.so.1 (libc6,x86-64) => /lib64/libgcc_s.so.1
/lib64 是/usr/lib64 的符号链接(symbolic link)。并且,/usr/lib64/libgcc_s.so.1 是/usr/lib64/libgcc_s-4.9.2-20150212.so.1 的符号链接(symbolic link),它作为真实文件(92816 字节)存在。
所以,我不明白 ld 在 -lgcc_s 上的问题是什么。 crtbegin 无处可寻,gcc (no _s) 无处可寻。
yum install libgcc 说它已经安装并且是最新版本,无需执行任何操作。
因为我已经安装了 clang 源构建,我可以重新构建 clang,这次使用 clang 而不是 gcc,以摆脱依赖性吗? (也许那时“候选 GCC 安装”位消失了。)
我可以强制将 -stdlib=c++ 和 -lc++abi 设置为默认值,或者至少在没有 gcc 的情况下安装 libc++ 和 libc++abi 吗?
最佳答案
我花了一些时间尝试让 clang 在没有 GCC 的情况下与 libc++ 和 libc++abi 一起工作,我发现这确实是可能的,即使考虑到 LLVM/clang 的当前状态有点问题。除了小型测试程序之外,我还能够构建 CMake 和其他一些用 C++ 编写的软件包,而无需安装 GCC,并且生成的二进制文件独立于 libstdc++;根据 ldd 输出,它们仅依赖于 libc++/libc++abi。不幸的是,我无法使用使用 GCC 构建的 clang 构建 clang 本身。我一直在不同的 Linux 平台上进行试验(Fedora 21 32 位、Amazon Linux 2015.3 版(基于 RPM)64 位、CentOS 7.1 64 位和 Ubuntu 14.04 64 位)。
即使可以使用 clang 使用 libc++/libc++abi 构建软件而不依赖于 libstdc++ 并且不存在 GCC 编译器,但典型的 Linux 安装与 libgcc 和 libstdc++ 紧密相关,以至于摆脱它们是不切实际的。尝试删除这两个包,您将看到系统有多少依赖于它们。即使在 FreeBSD 10.1 上,clang 是默认编译器并且没有安装 GCC,libgcc.a、libgcc_s.so 和一些 crt*.o 文件在构建程序时也会被使用,如 -v 选项所示。此外,在 FreeBSD 10.1 上,根据 ldd,生成的二进制文件依赖于 libgcc。在以 dpkg 作为包管理器的 Ubuntu 上,文件
libgcc.a
libgcc_s.so
crtbegin.o
crtbeginT.o
crtbeginS.o
crtendS.o
crtend.o
在 libgcc-devel 包中,而在基于 RPM 的系统上,例如 Fedora,它们在 gcc 包中。此外,您可能需要这些文件,即使我尝试构建的代码不需要它们:
crtfastmath.o
crtprec32.o
crtprec80.o
crtprec64.o
因此,有人可能会争辩说,上述文件最好属于 libgcc,而不是 gcc。据我所知,在删除 gcc 包之前,需要在基于 RPM 的系统上完成以下操作:
1) 创建符号链接(symbolic link)
libgcc_s.so -> libgcc_s.so.1
在 libgcc_s.so.1 所在的任何目录中。
2) 将上面列出的 crt*.o 文件复制到该目录。
3) 在同一目录中创建符号链接(symbolic link)(libstdc++.so.x 应该已经存在;x 是一个数字):
libstdc++.so -> libstdc++.so.x
只有在您打算使用 libstdc++ 时才需要它;如果您只打算使用 libc++,则不需要这样做。一些系统 libstdc++.so 是属于 libstdc++ 包的 libstdc++.so.x 的符号链接(symbolic link),由 libstdc++-devel 包放置到 GCC 库目录中,因此您可以在卸载 GCC 后删除该目录,只需在中创建符号链接(symbolic link)libstdc++.so.x 所在的同一目录。
现在您应该能够执行以下操作:
1) 构建一个 C 程序:
clang progname.c
2) 使用 libstdc++ 头文件/库构建 C++ 程序:
clang++ -I<location of headers> progname.cpp
在我看过的基于 RPM 的系统上,libstdc++ header 是 libstdc++-devel 包的一部分,它们的位置可以从包上的 rpm -ql 找到。
3) 使用 libc++ 头文件/库构建 C++ 程序:
clang++ -I/<location of headers> progname.cpp -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc -lgcc_s
header 的位置是在构建 LLVM+clang 等时安装它们的位置。
请参阅http://libcxx.llvm.org/了解更多信息。使用 libc++/libc++abi 构建 C++ 代码时,您可以使用 -stdlib=libc++ 而不是 -I 标志,但在我的测试中,它仅适用于从源代码构建的 clang,而不适用于从存储库安装的 clang(您可以安装来自 repo 的 clang 并使用它来构建 libc++/libc++abi;或者您可以使用 gcc 构建 libc++(abi),然后删除 gcc 并将库与 repo 提供的 clang 一起使用。
在配置软件包以使用 clang + libc++ 构建它时,您可能需要设置以下内容:
LIBS="-nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc"
CXX=clang++
CXXFLAGS="-stdlib=libc++"
CC=clang
请注意,要配置 CMake 源以便构建它,我必须使用这样的包装器脚本:
#!/bin/bash
MYLFLAGS="-nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc"
# Catch the case when we only want to compile; this helps us avoid some warnings:
if echo "$@" | egrep "(^-c | -c | -c$)" >/dev/null 2>&1; then
MYLFLAGS=""
fi
/usr/local/bin/clang++ -stdlib=libc++ "$@" $MYLFLAGS
它也可能对其他用途有用。
有关更多信息,请参阅我的文章 http://www.omniprog.info/clang_no_gcc.html
关于gcc - Fedora 21 有 clang,没有 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135425/
Fedora 21 带有丑陋的 Gnome 3,我安装了 XFCE 和 MATE,但我不知道如何将它们中的任何一个设置为默认的 X 窗口管理器。从 Gnome 3 注销后,我没有从已安装的窗口管理器中
我有软呢帽 25。我读了这篇文章 - http://docs.mitmproxy.org/en/stable/certinstall.html#certinstall , 但 fedora 的信息不存
安装 Fedora 19 桌面版后,我运行 Qt Example 的系统托盘。但我找不到系统托盘图标。 事件概览中没有通知区域。 请让我知道显示通知区域或托盘图标。 最佳答案 将鼠标快速移动到右下角应
我正在使用使用快捷方式的文本编辑器ctrl+alt+arrowup/arrowdown这是在 Fedora 20 中切换工作区的默认键。所以我需要更改快捷键以使其在文本编辑器中工作。我改变了快捷方式
当我尝试在新的 64 位 Fedora 28 安装上运行 64 位程序时出现此错误。 我尝试通过以下方式安装 ncurses 库: sudo yum install ncurses-libs sudo
我正在使用 GNOME 运行 Fedora 27 桌面版。我已尝试过网络上所有的说明,但没有找到任何可以让我设置与远程用户共享屏幕的内容。谁能帮我解决这个问题吗? 提前非常感谢您的回复。 这是迄今为止
我从 Atomic 官方网站下载了一个 qcow2 图像,但我对启动这个 qcow2 图像的步骤感到非常沮丧,而且谷歌没有提供有用的明确提示。 谁能给我一些关于如何启动 qcow2 虚拟机的明确提示?
我正在尝试使用“mpif90”在 Fedora 21 中编译一些代码。 首先我用'yum'安装openmpi: [root@localhost Inversion]# yum install open
我最近买了一个新硬盘,我想在上面安装 Fedora,但是电脑很旧,无法从 USB 启动,而且我无法使用 DVD。 我想使用我当前安装的 Fedora 在新硬盘上安装一个新副本。 我有 ISO。我正在使
虽然 Fedora 34 将在下月底左右才会正式发布,但针对更晚才会到来的 Fedora 35 目前已有一些变更提案被提交。其中,在众多的早期变化中值得注意的一点是在其操作系统发布信息中把操作系统从
Fedora 33 很有可能会成为 Fedora 有史以来最大的版本之一,最大不仅仅体现在新添加的重要功能,如Fedora 桌面版本将默认使用Btrfs 文件系统,在新增功能的数量方面,到目前为止,
DNF 和 RPM 作为包管理器有什么区别?一种与另一种的优势是什么,这些优势将适用于哪些情况? 最佳答案 这些工具协同工作。 DNF 处理依赖解决、在网络上查找文件、存储库管理等。 RPM 处理实际
我刚刚安装了 Fedora 23 的 Cinnamon spin 的新版本。尽管我喜欢 Nautilus/Nemo,但我想将 Thunar 设置为我的默认文件浏览器。我尝试在 /usr/share/a
我是 Linux 和 VirtualBox 的新手,但是我已经通过 Windows 7 上的 VirtualBox 设置了一台 guest Fedora 19 机器(32 位,因为我没有 VT-x 功
我刚刚安装了 Fedora 23 的 Cinnamon spin 的新版本。尽管我喜欢 Nautilus/Nemo,但我想将 Thunar 设置为我的默认文件浏览器。我尝试在 /usr/share/a
在目录 /lib/systemd/system 中,我创建了一个文件 XYZ.service。 运行 systemctl start XYZ 时,它不会返回。我必须按 Ctrl-C 才能发出命令。想知
我正在尝试在 64 位 Fedora 21 上运行 32 位可执行文件。 #include int main(){ printf ("Hello C\n"); return 1; }
我不知道如何在 fedora 24 中安装 lex 和 yacc。我在 ubuntu 16 中安装了它。使用以下命令: sudo apt-get update sudo apt-get install
Chromium 是否支持语音合成 API?我需要安装声音吗?如果是这样,我该怎么做?我正在使用 Fedora。我需要安装额外的软件包才能使用像视频这样的声音吗? 我试过这段代码: var msg =
dnf 命令会在您每次更新时下载整个软件包,而 yum 使用 deltarpm 并下载较少的数据。 怎么用dnf as yum来保存数据? 最佳答案 安装 deltarpm打包并添加 deltarpm
我是一名优秀的程序员,十分优秀!