0

私は現在、GiNaC を使用していくつかの代数タスク (微分や統合など) を解決することを含む C++ アプリケーションを開発しようとしています。最初に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が、両方ともコンパイルに失敗しました。

4

2 に答える 2

1

問題は、コンパイル行のパラメーターの順序です。次の 2 つのバリエーションのいずれかを試してください。

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

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

これは、オブジェクト ファイルとライブラリの順序がリンカーにとって重要であるという考え方です。非常に簡単に言えば、デフォルトでは、以前に未解決のシンボルを解決する必要がある場合にのみ、ライブラリをリンクします。

上記の最初のバリアントはライブラリをビルド パラメーターの最後 (コードのオブジェクト ファイルの後) に移動しますが、2 番目のバリアントはリンカーでこの動作を無効にします。

于 2013-09-09T11:01:15.153 に答える
0

私はまったく同じ問題に遭遇し、あなたがなりたい場所にあなたを連れて行く2つのことを見つけました:

  1. コマンドラインの-lcln に配置しました-lginac

これにより、コンパイルできましたが、プログラムは実行されませんでした。これに対する解決策を見つけました。エラーは"GLIB_CXX_3.4.21 not defined in libstdc++.so.6 with link time reference"

  1. に静的にリンクlibstdc++する-static-libstdc++

次のように:

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

平和

于 2015-11-15T01:08:39.733 に答える