如何编译和链接cddlib库?

时间:2015-02-01 21:31:38

标签: c++ ubuntu static-linking

我想启动一个小c ++项目,它使用我在目录中安装的库cddlib(http://www.inf.ethz.ch/personal/fukudak/cdd_home/cdd.html)(加上GMP),比如说

/some/path/to/libcdd/

在另一个目录中,我有一个文件 main.cpp ,其内容为

#include "setoper.h"
#include "cdd.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <string.h>

int main()
{
  fprintf(stdout, "start\n");

  dd_set_global_constants();  
  dd_free_global_constants();

  fprintf(stdout, "done\n");

  return 0;
}

这里,两个函数dd _...是库cddlib中的函数。我尝试使用(naive?)命令

编译它
g++ -o out main.cpp

然而,这会产生

/tmp/ccF7dx0W.o: In function `main':
main.cpp:(.text+0x28): undefined reference to `dd_set_global_constants'
main.cpp:(.text+0x2d): undefined reference to `dd_free_global_constants'
collect2: error: ld returned 1 exit status

呼叫

也是如此
g++ -L/some/path/to/libcdd/lib -I/some/path/to/libcdd/include -lcdd main.cpp

这只是一个愚蠢的错误吗?我正在使用Ubuntu 14.04和g ++ 4.8.2。

1 个答案:

答案 0 :(得分:0)

首先,将cdd-path添加到您的包含:

#include <cdd/setoper.h>
#include <cdd/cdd.h>

接下来使用以下编译:

g++ -o exe main.cpp -lcdd

如果库在系统库目录中,则不需要任何其他内容。

注意: -lcdd必须是编译器命令行的最后一个参数才能正常工作。

希望这适合你。