Reputation: 1189
I am working on a project where I want to use a C++ library in Python. After a little bit of research I figured out that Swig would be a good way to do it (a small example worked).
So now I am trying to include Swig into cmake to make things more comfortable.
In my case, I have a really small program to test things:
#include "ct.h"
using namespace std;
int main(int argc, char const *argv[])
{
/* code */
return 0;
}
int test()
{
Image image(10,11);
cout << "hallo"<< endl;
return 3;
}
The Image class is defined in a header "image.h", which is included in "ct.h". This is probably the problem here, since the library, which includes the Image class needs to be linked against the library, which is generated by Swig. I am not sure about this...And, especially, I don't know how to do this. I was not able to find anything in the manual.
Anyway, if I want to include the lib in python I get the following error:
>>> import kissCT
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "kissCT.py", line 25, in <module>
_kissCT = swig_import_helper()
File "kissCT.py", line 21, in swig_import_helper
_mod = imp.load_module('_kissCT', fp, pathname, description)
ImportError: ./_kissCT.so: undefined symbol: _ZN5ImageC1Eii
The related Swig file looks like this:
/* kissCT test module */
%module kissCT
%{
#import "ct.h"
extern int test();
%}
extern int test();
I hope, all this is not to confusing and I would really appreciate if someone has an idea what I did wrong.
Edit: the related cmake file looks like this
Upvotes: 2
Views: 2180
Reputation: 2596
Actually, because the unresolved symbol has been C++-mangled, it is an indication that the following linker option is missing:
-lstdc++
Upvotes: 0
Reputation: 3266
Python needs to be able to find the image library at run time. The simplest way is to set LD_LIBRARY_PATH environment variable to the folder containing the image .so file which contains the undefined symbol.
If you run the command "ldd _kissCT.so" it should show you the libraries it depends on.
Upvotes: 2