GiNaC未定义参考

时间:2013-09-09 02:15:24

标签: c++ ubuntu ginac

我目前正在尝试开发一个C ++应用程序,它将使用GiNaC解决一些代数任务(例如区分或集成);我首先从Ubuntu软件中心(Ubuntu 13.04)安装它,然后直接从ftp ftp://ftpthep.physik.uni-mainz.de/pub/GiNaC/安装它;但是,每次我尝试编译以下示例程序时:

#include <iostream>
#include <ginac/ginac.h>
using namespace std;
using namespace GiNaC;

int main()
{
    symbol x("x"), y("y");
    ex poly;

    for (int i=0; i<3; ++i)
        poly += factorial(i+16)*pow(x,i)*pow(y,2-i);

    cout << poly << endl;
    return 0;
 }

我得到一个错误列表,所有错误都以“未定义的GiNaC ::”引用开头。我已经验证了cln也已安装,并且头文件位于默认位置。此外,在编译时我使用了命令g++ -o simple pkg-config --cflags --libs ginac simple.cppg++ -o simple -lginac -lcln simple.cpp都未能编译。

2 个答案:

答案 0 :(得分:1)

问题是编译行上参数的顺序。请尝试以下两种变体之一:

g++ -o simple simple.cpp `pkg-config --cflags --libs ginac`

g++ -o simple -Wl,--no-as-needed `pkg-config --cflags --libs ginac` simple.cpp

这个想法是目标文件和库的顺序对链接器很重要。非常简单地说,默认情况下它只链接一个库,如果需要它来解析一些以前未解析的符号。

上面的第一个变体在构建参数的末尾移动库(因此在代码的目标文件之后),而第二个变体在链接器中禁用此行为。

答案 1 :(得分:0)

我遇到了同样的问题,我发现有两件事可以带你到你想去的地方:

  1. 我在命令行 -lcln之后放置了-lginac
  2. 这使我能够编译它,但程序不会运行。我找到了解决方案。错误是"GLIB_CXX_3.4.21 not defined in libstdc++.so.6 with link time reference"

    1. 使用libstdc++
    2. 静态链接到-static-libstdc++

      如:

      g++ -g testgin.cpp -o simple -lcln -lginac -static-libstdc++
      

      和平