У меня есть приложение на 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).
Однако, это приложение Segfaults сразу же после его запуска, и я никогда не попадаю в «Hello world».
Я могу создать экземпляр интерфейса из той же библиотеки, но не могу создать экземпляр класса, который реализует интерфейс. То есть;
void foobar()
{
IMyClass a; // Having this in the application works.
MyClass b; // Segfault if this is in.
}
Как вы можете видеть из приведенного выше, код даже не нуждается в вызове, чтобы приложение перешло в segfault.
Я использую Netbeans 6.7.1 и GCC 4.3.2.
Теперь, я предполагаю, что что-то не так с компоновкой библиотеки, но я не могу сказать, что именно. Я также делаю ссылки в других библиотеках (все статически связаны). Приведенные выше классы взяты из первой связанной библиотеки (как минимум, первой в списке). Если я создаю экземпляр класса из второй библиотеки в списке, все работает нормально.
Возможно, проблема похожа (или связана) с моей другой проблемой: https://stackoverflow.com/questions/1844190/linking-with-apache-xml-security-causes-unresolved-references
У кого-нибудь есть предложения по поводу проблемы?