我是linux的新手,不知道我需要把Clang预先构建的二进制文件http://llvm.org/releases/download.html#3.3放在哪里 .我下载它,用鼠标解压缩,并将/ bin的路径添加到我的$ PATH,并将/ lib的路径添加到$ LD_LIBRARY_PATH,并将带有my/lib路径的*.conf添加到/etc/ld.so.conf.d .我甚至重启笔记本电脑.
...但仍然无法使用Code :: Blocks GCC构建我的简单程序(错误:/home/aadgrand/tmp/LLVM-3.3/final/llvm.src/lib/Support/Signals.cpp - 对'dladdr'的未定义引用).测试程序的文本:
#include <iostream>
#include "llvm/IR/Module.h"
#include "llvm/IR/LLVMContext.h"
using namespace std;
int main()
{
llvm::LLVMContext &c = llvm::getGlobalContext(); // error line
cout << "Never printed" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我还需要做什么?也许我需要使用*.sig文件?嗯?
与如何使用预编译二进制文件安装CLang相同的问题?.很抱歉重复,但它真的非常有趣和重要.
=====更新======
我刚刚安装了llvm-3.1,与llvm-3.4相同的错误(来自预先构建的二进制文件):
-------------- Build: Debug in test2 ---------------
Compiling: main.cpp
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib …Run Code Online (Sandbox Code Playgroud) 为什么GCC和Clang会为此代码(x86_64,-O3 -std = c ++ 17)生成如此不同的asm?
#include <atomic>
int global_var = 0;
int foo_seq_cst(int a)
{
std::atomic<int> ia;
ia.store(global_var + a, std::memory_order_seq_cst);
return ia.load(std::memory_order_seq_cst);
}
int foo_relaxed(int a)
{
std::atomic<int> ia;
ia.store(global_var + a, std::memory_order_relaxed);
return ia.load(std::memory_order_relaxed);
}
Run Code Online (Sandbox Code Playgroud)
GCC 9.1:
foo_seq_cst(int):
add edi, DWORD PTR global_var[rip]
mov DWORD PTR [rsp-4], edi
mfence
mov eax, DWORD PTR [rsp-4]
ret
foo_relaxed(int):
add edi, DWORD PTR global_var[rip]
mov DWORD PTR [rsp-4], edi
mov eax, DWORD PTR [rsp-4]
ret
Run Code Online (Sandbox Code Playgroud)
铛8.0:
foo_seq_cst(int): # @foo_seq_cst(int)
mov …Run Code Online (Sandbox Code Playgroud) 我在C++中有一些示例代码:
struct RecordTest
{
int value1;
int value2;
};
void test()
{
RecordTest rt;
rt.value1 = 15;
rt.value2 = 75;
}
Run Code Online (Sandbox Code Playgroud)
和LLVM 3.4 IR:
%struct.RecordTest = type { i32, i32 }
; Function Attrs: nounwind
define void @_Z4testv() #0 {
entry:
%rt = alloca %struct.RecordTest, align 4
%value1 = getelementptr inbounds %struct.RecordTest* %rt, i32 0, i32 0
store i32 15, i32* %value1, align 4
%value2 = getelementptr inbounds %struct.RecordTest* %rt, i32 0, i32 1
store i32 75, i32* %value2, align …Run Code Online (Sandbox Code Playgroud) 我知道如何用LLVM API(特别是SwitchInst)编译这样的代码:
switch (h)
{
case 11:
.......
case 22:
........
}
Run Code Online (Sandbox Code Playgroud)
但我不知道,是否可以使用SwitchInst编译这样的代码:
Select Case x
Case 11 To 40
...........
Case 41 To 70
...........
End Select
Run Code Online (Sandbox Code Playgroud)
如何设置远程案例标签?
switchOperator->addCase(...What I need to put here?..)
Run Code Online (Sandbox Code Playgroud)