使用SWIG包装python的C代码.无法使用cout命令

前端之家收集整理的这篇文章主要介绍了使用SWIG包装python的C代码.无法使用cout命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试使用SWIG为python包装这个简单的C代码

#include "hello.h"

int helloW() 
{
    std::cout << "Hello,World!" ;
    return 0;
}

这里是相对标题

#include 

正如我正在使用的SWIG输入文件

/* file : pyhello.i */

/* name of module to use*/
%module pyhello
%{
    #include "hello.h"
%}    
%include "hello.h";

现在,我的makefile(运行正常)是:

all:
    swig -c++ -python -Wall pyhello.i 
    gcc -c -fpic pyhello_wrap.cxx hello.cpp -I/usr/include/python2.7
    gcc -shared hello.o pyhello_wrap.o -o _pyhello.so

因为我能够从不同的来源汇总相关的问题在线.
现在,一旦我尝试使用命令导入python我的库

>>> import pyhello

这是我得到的错误

    Traceback (most recent call last):
  File "

这让我觉得这个问题与命令std :: cout相关,或者一般来说,与标准库< iostream>相关.

希望有人可以给我一些关于这个问题的提示.非常感谢提前!!

注意:同样的问题我尝试使用命令printf()而不是std :: cout和库< cstdio>而不是< iostream>

最佳答案

ImportError: ./_pyhello.so: undefined symbol: _ZSt4cout

用c filt _ZSt4cout你会发现它是std :: cout(name mangling).

你应该使用g,而不是gcc,尤其是你的链接器命令(带-shared).

或者您需要显式链接某些-lstdc您的共享库.

阅读Drepper的How to Write Shared Libraries(因为Python是dlopen(3),然后是dlsym(3)).

你最好声明为extern“C”int helloW(void);你的日常工作(阅读C++ dlopen minihowto).

猜你在找的Python相关文章