Compilando um wrapper SWIG Python para uma biblioteca estática?

Esta é uma pergunta noob. Estou tentando aprender como usar o SWIG para criar uma interface python para uma biblioteca C ++. A biblioteca é uma biblioteca proprietária de terceiros; trata-me na forma de um arquivo de cabeçalho (foo.h) e um arquivo estático (libfoo.a).

Para simplificar, criei um exemplo que acho que tem a mesma patologia. Mesmo mensagens de erro de qualquer maneira.

/* foo.hpp */
class TC {
    public:
       TC();
       int i;
    private:
};

Para referência, aqui está foo.c. Eu só tenho os arquivos de cabeçalho e archive da biblioteca real de terceiros.

/*foo.cxx */
#include "foo.hpp"
TC::TC() {
    i = 0;
}

Eu criei essa biblioteca digitandog++ -c foo.cxx && ar rcs libfoo.a foo.o

Meu arquivo de interface SWIG é o seguinte:

/* foo.i */ 
%module foo
%{
#include "foo.hpp"
%}
%inclu,de "foo.hpp"

Eu gero foo_wrap.cxx digitando

swig -python -c++ foo.i

e depois compile.

g++ -c -fPIC -I/usr/include/python2.6 foo_wrap.cxx 
g++ -shared -L. -lfoo -lpython2.6 -Wl,-soname,_foo.so foo_wrap.o -o _foo.so

A compilação foi bem-sucedida, mas quando executo Python eimport foo, Recebo um erro de símbolo indefinido.

>>> import foo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
  File "foo.py", line 25, in <module>
    _foo = swig_import_helper() 
  File "foo.py", line 21, in swig_import_helper
    _mod = imp.load_module('_foo', fp, pathname, description)
ImportError: ./_foo.so: undefined symbol: _ZN2TCC1Ev

Oque esta acontecendo aqui? O problema parece ser que a etapa de vinculação não está localizando a definição do construtor TC :: TC.

Nota: Se eu alterar a etapa de vinculação para

g++ -shared -L. -lfoo -lpython2.6 -Wl,-soname,_foo.so foo_wrap.o -o _foo.so

então tudo funciona. Mas isso é uma opção para o meu problema real, onde não tenho o código-fonte bruto? Pode-se extrair um .o de um .a? Presumivelmente, é possível fazer isso manualmente, mas não deveria haver alguma maneira automatizada de fazer isso?

questionAnswers(1)

yourAnswerToTheQuestion