Ok ho letto le guide che mi avete consigliato e le ho trovate molto utili, ma continuo ad avere problemi con la mia libreriola, continuo a non capire se la richiamo male da python, o se continua a sfuggirmi qualcosa.
Ho proceduto nel seguente modo.
Ho creato un file sorgente molto semplice con una funzione al suo interno:
codice:
#include <iostream>
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
void pippo() {
cout << "Tempo: " << endl;
}
codice di per se molto semplice.
A questo punto mi sono rifatto alla guida presente nel secondo link ed ho creato la libreria statica nella maniera indicata.
La domanda ora è, una volta creato lo shared object, le funzioni dichiarate nel suo sorgente dovrebbero essere accessibili?
In pratica ho popolato la variabile LD_LIBRARY_PATH con il path agli so della mia libreria (li ho messi in opt/bin), e sono entrato da python per riprovare:
codice:
>>> from ctypes import *
>>> test = cdll.LoadLibrary("libdintest.so.1")
>>> print test.pippo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/ctypes/__init__.py", line 366, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.6/ctypes/__init__.py", line 371, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /opt/lib/libdintest.so.1: undefined symbol: pippo
>>> export
cos'altro puo mancare?
Ho seguito diversi tutorial, ma non riesco ad estrarne il punto cruciale.