OpenCASCADE を用いた最低限のサンプルを書いてみます。下記は、2つのベクトルが平行か否かを検証するコードです。Standard_Macro.hxx は不要かも。

#include <stdio.h>

#include <Standard_Macro.hxx>

#include <gp_Pnt.hxx>

#include <gp_Vec.hxx>

int main()
{
  gp_Pnt p1(0, 0, 0);
  gp_Pnt p2(1, 0, 0);
  gp_Vec v1(p1, p2);

gp_Pnt p3(1, 2, 0);
  gp_Pnt p4(2, 3, 0);
  gp_Vec v2(p3, p4);

if (v1.IsParallel(v2, 0) == Standard_True)
    puts("parallel!");
  else
    puts("not parallel!");

return 0;
}

ビルドします。

g++ -g -o hoge -I/usr/include/opencascade -lTKernel -lTKMath hoge.cpp

実行します。

$ ./hoge
not parallel

上手く動作している模様。次に、依存関係を調べてみます。

$ ldd hoge
        linux-gate.so.1 =>  (0xb77a0000)
        libTKernel-6.3.0.so => /usr/lib/libTKernel-6.3.0.so (0xb7549000)
        libTKMath-6.3.0.so => /usr/lib/libTKMath-6.3.0.so (0xb73f2000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb72fc000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb72d6000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb72b8000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7171000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb716d000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7153000)
        /lib/ld-linux.so.2 (0xb77a1000)

使っていない直接参照を調べます。

$ ldd -u hoge
Unused direct dependencies:

    /usr/lib/libTKMath-6.3.0.so
    /usr/lib/libstdc++.so.6
    /lib/i686/cmov/libm.so.6
    /lib/libgcc_s.so.1

あれ、TKMath は使われてないな。っと思ってビルド時に -lTKMath を外すと

/tmp/ccSaJdhZ?.o: In function gp_Vec::Angle(gp_Vec const&) const':
/usr/include/opencascade/gp_Vec.lxx:111: undefined reference togp_VectorWithNullMagnitude?::Raise(char const*)'
/usr/include/opencascade/gp_Vec.lxx:114: undefined reference to `gp_Dir::Angle(gp_Dir const&) const'
collect2: ld returned 1 exit status

gp_Vec クラスの依存関係の解決に失敗して ld から怒られます。

間接参照で、TKMath も使ってるってことかな。

んー、どいつとリンクさせればいいのか、いまいちちゃんと分かっていない感じです。