我通过以下步骤针对libc,libc abi,编译器-rt构建clang:
> < li>
为了下载(和更新)llvm和子项目,我使用了以下脚本:
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk clang/tools/extra
svn co http://llvm.org/svn/llvm-project/lldb/trunk lldb
svn co http://llvm.org/svn/llvm-project/lld/trunk lld
svn co http://llvm.org/svn/llvm-project/polly/trunk polly
cd ../projects/
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
svn co http://llvm.org/svn/llvm-project/libunwind/trunk libunwind
svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp
svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
首先,我使用 gcc 针对 libgcc 和 libstdc 构建 llvm、clang、libunwind,并将它们安装在 /usr/local
中。在以下所有步骤中,除了最后一个,我都使用这个新鲜的叮当/叮当
。
(我几乎可以肯定,这里没有一个步骤是多余的。)
在最后一步,我遇到了一个问题:我必须向链接器添加额外的参数(我将它们添加到CMAKE_EXE_LINKER_FLAGS
和CMAKE_SHARED_LINKER_FLAGS
)-lunwind
和-lc abi
。此外,每次我在项目中使用 -stdlib=
libc 和 compiler-rt(或者同样,CLANG_DEFAULT_CXX_STDLIB=libc
和 CLANG_DEFAULT_RTLIB=compiler-rt
)的结果 clang
时,我都必须一遍又一遍地这样做。很烦人。比如说Qt Creator生成的项目的CMakeList.txt
应该手动或cmake-gui
进行更正。
如何让< code>clang驱动在运行时自动指定这些选项给< code>ld?有没有类似于< code>RPATH的机制?或者有一些特定的CMake变量(在llvm构建过程之前指定)来实现期望的行为吗?
我可以使用RPATH
吗?
当然,我不想制作一些像包装器(类似于clang-libc
)这样的bash脚本来指定额外的参数。我希望库在clang
二进制文件本身的某个地方进行硬编码。
已经提出了几个变通方法。我最终得到了以下变通方法:
mkdir build
cd build
# backup:
cp -vaf /usr/local/lib/libc++.{a,so.1.0} /usr/local/lib/libc++abi.{a,so.1.0} /usr/local/lib/libunwind.{a,so.1.0} .
clang -shared -fPIC -pthread -o fuse.so -Wl,--whole-archive libc++.a libc++abi.a libunwind.a -Wl,--no-whole-archive -ldl -lm
ar x libc++.a
ar x libc++abi.a
ar x libunwind.a
ar rc fuse.a *.o
sudo chown root:root fuse.*
sudo cp -vaf fuse.so /usr/local/lib/
sudo ln -svf /usr/local/lib/libc++.so.1 /usr/local/lib/fuse.so
sudo cp -vaf fuse.a /usr/local/lib/
sudo mv -vf /usr/local/lib/libc++.a /usr/local/lib/libc++.a.bak
sudo ln -svf /usr/local/lib/libc++.a /usr/local/lib/fuse.a
它将所有使用的库(libc
,libc abi
和libunwind
)合并到一个*.a
或*.so
文件中。然后libc .a和libc .so
被替换为(链接到)生成的组合文件,保存以前的版本以供可能的备份。
它非常适合我。
但这不是答案。也许有一天clang
不会从盒子里就出现这样的问题。
我希望一些方法只对kotlin代码可见,而不是对Java代码可见。 例如,这里有一个方法,它只能在kotlin代码中调用,不能在Java代码中调用。
当使用Approle Auth方法创建角色时,我会告诉Vault在一个测试策略下创建生成的令牌 我获得roleid和secretid:vault read auth/approle/role/test/role-id vault write-f auth/approle/role/test/secret-id并使用它生成令牌: 我得到一个生成的令牌,现在检查生成的令牌:
IntelliJ Idea使用作为所有导入的Gradle项目的默认Gradle位置: 我想在默认情况下对导入的Gradle项目使用< code >指定位置: 但是,不可能选择作为默认选项。 如何强制Idea对新的导入项目使用? 联系: IDEA以及如何禁用分级包装生成 对新项目使用本地梯度分布而不是包装
我使用GridLayoutManager将项目垂直放置在回收器视图中。每个项目都有一个跨度。现在我希望一些项目结束当前行,所以下一个项目被放置在它下面的新行上。每个项目只能占用一个跨度,所以它们都是相同的宽度。 例子: 第[4]项将放在下一行,而不是第[3]项之后。第[3]项后的空间不得使用。 我试图使用SpanSizeLookup,但它的对我来说没有任何意义,任何值似乎都没有任何作用。 有人能提
对于中继中的工作正常,但对于来自中继的,失败并显示错误消息(链接): 错误:未为此 lambda 函数捕获“此” 在命名空间范围内定义对两者都适用。 使用 lambda 捕获稍微修改的定义也适用于全局或本地范围。 哪个编译器是对的?
我安装了php5.6.6作为apache 2.4模块。 当加载带有 因此,正如文档所建议的,我编辑了httpd.conf指向php.ini配置文件(在C:\php56中)。我还添加了C:\php56到PATH和PHPRC环境变量。 由于我在这个文件夹中没有任何php.ini文件,我复制并重命名了“php.ini生产”文件,并编辑了扩展路径。 当我再次显示页面时,它将保持空白。。。下面是“php--