0

我目前正在尝试开发一个 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,都编译失败。

4

2 回答 2

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

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

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

于 2013-09-09T11:01:15.153 回答
0

我遇到了同样的问题,我发现有两件事确实能把你带到你想去的地方:

  1. 我放在命令行-lcln 之后 -lginac

这使我能够编译它,但程序无法运行。我找到了解决方案。错误是"GLIB_CXX_3.4.21 not defined in libstdc++.so.6 with link time reference"

  1. 静态链接到libstdc++with-static-libstdc++

如:

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

和平

于 2015-11-15T01:08:39.733 回答