我目前正在尝试开发一个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.cpp
和g++ -o simple -lginac -lcln simple.cpp
都未能编译。
答案 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)
我遇到了同样的问题,我发现有两件事可以带你到你想去的地方:
-lcln
之后放置了-lginac
这使我能够编译它,但程序不会运行。我找到了解决方案。错误是"GLIB_CXX_3.4.21 not defined in libstdc++.so.6 with link time reference"
libstdc++
-static-libstdc++
醇>
如:
g++ -g testgin.cpp -o simple -lcln -lginac -static-libstdc++
和平