我正在尝试使用clang编译器的openmp代码
我通过git下载了代码并且做了make
和make install
.它成功安装了具有openmp支持的clang编译器.但是当我尝试编译示例代码(在上面的链接中指定)时,我收到以下错误:
/ usr/bin/ld:找不到-liomp5
我没有指定网站中提到的包含和lib的路径,但我打算在使用-L和-I选项在命令行上编译时指定它们.
$clang -I/usr/lib/gcc/i686-linux-gnu/4.6/include -fopenmp test.c -o test
但是,我找不到iomp5 lib的路径,因此我得到了上述错误.有人可以告诉我如何解决这个问题?
我读了有效的c ++.他们给出了一个例子如下:
class Rational{
public : Rational (int num=0, int deno=1);
private : int n,d;
friend Rational operator*(const Rational &lhs, const Rational &rhs);
}
Rational& operator*(const Rational& lhs, const Rational& rhs)
{
static Rational result;
result = f(lhs.n*rhs.n, lhs.d*rhs.d) //some function f which multiply num
//and denom which returns Rational type
return result;
}
bool operator==(const Rational& lhs, const Rational& rhs);
int main()
{
Rational a,b,c,d;
.....
if((a*b)==(c*d)){
....
}
else {
.....
}
}
Run Code Online (Sandbox Code Playgroud)
为什么compariosion(a*b)==(c*d)总是评估为真?
==运算符将被评估为(运算符==(运算符*(a,b),运算符*(c,d)))有效C++说 - 运算符==将被要求比较静态Rational对象的值inside operator*,其中包含*运算符内的静态Rational对象的值.为什么这些静态值总是相等?
我正在测试LLVM与gcc生成的代码质量
我有一个像这样的小程序
#include<math.h>
double mysqrt(double a){
return sqrt(a);
}
int main()
{
mysqrt(0.1);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
克朗正在散发出来
mysqrt: # @mysqrt
# BB#0: # %entry
jmp sqrt # TAILCALL
Run Code Online (Sandbox Code Playgroud)
这意味着它正在调用sqrt函数
gcc正在发光
mysqrt:
.LFB25:
.cfi_startproc
subl $28, %esp
.cfi_def_cfa_offset 32
fldl 32(%esp)
fld %st(0)
fsqrt
fucomi %st(0), %st
Run Code Online (Sandbox Code Playgroud)
这意味着它使用直接机器指令fsqrt(我想它比调用函数要快得多).这是针对具有O3级优化的X86机器完成的.有人知道为什么LLVM正在调用函数而不是使用机器指令吗?
我想证明一种简化方法,其中涉及计算以2为底的对数。z3 / cvc4中是否有任何函数可用于计算它?