私はC++アプリケーションを持っています(以下に示すように、大幅に短縮されています)。
#include <iostream>
#include "MyClass.h"
void foobar()
{
MyClass a;
}
int main(int argc, char** argv)
{
std::cout << "Hello world!\n";
return 0;
}
「MyClass」は静的にリンクされたライブラリ(.a)で定義されています。
ただし、このアプリケーションは起動した瞬間にSegfaultが発生し、「Helloworld」に到達することはありません。
同じライブラリからインターフェイスのインスタンスを作成することはできますが、インターフェイスを実装するクラスのインスタンスを作成することはできません。つまり、
void foobar()
{
IMyClass a; // Having this in the application works.
MyClass b; // Segfault if this is in.
}
上からわかるように、アプリケーションがセグメンテーション違反を起こすためにコードを呼び出す必要はありません。
Netbeans6.7.1とGCC4.3.2を使用しています。
さて、ライブラリのリンクに何か問題があると思いますが、何がわかりません。他のライブラリ(すべて静的にリンクされている)にもリンクしています。上記のクラスは、最初にリンクされたライブラリからのものです(少なくともリストの最初)。2番目にリストされたライブラリからクラスのインスタンスを作成すると、すべてが正常に実行されます。
問題が他の問題と類似している(または関連している)可能性があります:https ://stackoverflow.com/questions/1844190/linking-with-apache-xml-security-causes-unresolved-references
誰かが問題になるかもしれないことについて何か提案がありますか?