链接到静态编译的z3需要Linux上的其他库

时间:2019-03-28 15:58:23

标签: z3 static-linking

我使用CMake使用以下命令编译z3(相当新的)的静态版本:

cmake -DBUILD_LIBZ3_SHARED=false -DCMAKE_INSTALL_PREFIX=/opt/z3-devel -G "Unix Makefiles" ../

现在,当我将库静态链接到C ++程序时,请说一下z3示例的一个小变化:

#include"z3++.h"
using namespace z3;

int main(int argc, char** argv) {
  config conf;
  context c(conf);
  expr x = c.int_const("x");
  expr y = c.int_const("y");
  expr z = c.int_const("z");
  goal g(c);
  g.add( ((2*x)+y)+z == 4);
  g.add( (x+(2*y))+z == 4);
  g.add( x+y == 4);
  std::cout << g << "\n";
  tactic t(c, "fm");
  apply_result r = t(g);
  std::cout << r << "\n";
  return 0;
}

通过

g++ -c -I /opt/z3-devel/include -static -o main.o main.cc
g++ -static -L /opt/z3-devel/lib64 -o main main.o -lz3

我收到一长串未定义的参考链接错误。解决此问题的方法是添加-lgomp -pthread -lrt -ldl作为其他库。链接器输出以下警告:

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/8/libgomp.a(target.o): in function `gomp_target_init':
(.text+0x32c): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

尽管如此,该程序仍可以在我自己的计算机和Starexec上正常运行。

这种静态链接和动态链接的组合是我所能做到的最好的吗?那些库是否应该已经静态链接到libz3.a?我在系统上有gomp,pthread和rt的静态版本。

0 个答案:

没有答案