Swig:错误 - 未定义的符号:_ZN7QString11shared_nullE

时间:2014-03-27 11:01:09

标签: python pyqt

我是SWIG的新手..我只是尝试了一个简单的项目应用程序来实现SWIG。

代码如下所示:

test.cpp:

#include "dijsdk.h"
#include <iostream>
#include <QString>
#include "arraysize.h"
#inlcude "test.h"

int findcam()
{
error_t result = E_OK;
error_t result1;
QString m_guids[16];
DijSDK_CamGuid guids[ARRAYSIZE(m_guids)] = {0};    
unsigned int numGuids = ARRAYSIZE(guids);
result = DijSDK_Init();   //API call
if (result ==0)
    result1 = DijSDK_FindCameras(guids, &numGuids); //API call

std::cout<<"\nNumguids = " <<numGuids;
std::cout<<"\nResult = "<<result1;
std::cout<<"\nGuids = "<<guids[0];

return 0;
}

test.h:

/*File test.h*/
int findcam();

test.i:

%module test

%{
#include "dijsdk.h"
#include "arraysize.h"
#inlcude "test.h"
%}

int findcam();

这里dijsdk.h和arraysize.h是第三方头文件。

创建所有这些文件后,我执行了命令

$ swig -c++ -python test.i

这会创建test_wrap.cxx和test.py文件

我正在尝试使用disutils

创建.so文件

setup.py:

#!/usr/bin/env python

from distutils.core import setup, Extension

test_module = Extension('_test',
                           sources=['test_wrap.cxx', 'test.cpp'],
                           )

setup (name = 'example',
       version = '0.1',
       author      = "SWIG Docs",
       description = """Simple swig example from docs""",
       ext_modules = [test_module],
       py_modules = ["test"],
       )

我刚刚提到这个link并创建了这些文件,我可能在脚本的某个地方错了,正确的我。

由于我的test.cpp文件包含qt头文件和第三方文件,我通过在变量CPLUS_INCLUDE_PATH中包含它们的路径来编译文件

$ python setup.py build_ext --inplace

CPLUS_INCLUDE_PATH的内容是:

"/usr/include/python2.7/,/usr/include/qt4,/usr/include/qt4/QtCore,/usr/include/qt4/QtGui,/home/user/Desktop/SwingTest/"

所有这些步骤都会创建一个成功的_test.so文件。现在,在导入此_test.so文件时,我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "test.py", line 26, in <module>
    _test = swig_import_helper()
  File "test.py", line 22, in swig_import_helper
    _mod = imp.load_module('_test', fp, pathname, description)
ImportError: ./_test.so: undefined symbol: _ZN7QString11shared_nullE

从错误我可以看出它是一个QT链接错误。虽然我在变量CPLUS_INCLUDE_PATH中包含路径但为什么它仍然失败?

任何帮助都会非常感激....

0 个答案:

没有答案