Python 使用C+时未定义符号+;f2py的源代码

Python 使用C+时未定义符号+;f2py的源代码,python,c++,c,f2py,Python,C++,C,F2py,我可以用f2py将C函数包装如下: 富科 然后,我执行,f2pyfoo.pyf-cfoo.c-mfoo,它创建了Python库,例如,代码 import numpy as np import foo foo.func( np.ones(3) ) 按预期打印3 问题:更改foo.c→ foo.cpp导致未定义符号 通过将foo.c的扩展名更改为foo.cpp,我注意到 f2py foo.pyf -c foo.cpp -m foo 调用g++而不是gcc。好的但是,当我在Python中执行,i

我可以用
f2py
将C函数包装如下:

富科

然后,我执行,
f2pyfoo.pyf-cfoo.c-mfoo
,它创建了Python库,例如,代码

import numpy as np
import foo

foo.func( np.ones(3) )
按预期打印
3

问题:更改
foo.c
→ <代码>foo.cpp导致未定义符号 通过将
foo.c
的扩展名更改为
foo.cpp
,我注意到

f2py foo.pyf -c foo.cpp -m foo
调用
g++
而不是
gcc
。好的但是,当我在Python中执行,
import foo
时,我看到:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: ./foo.so: undefined symbol: func_
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:./foo.so:未定义符号:func_
<>我必须用什么魔法才能使<代码> F2Py <代码>用C++代码工作?可能吗

附加说明:


如果我删除接口文件中的
intent(c)foo
行,那么
foo.c
会产生相同的行为,即它使用
f2py进行编译,从Python导入时会出现相同的未定义符号错误。

啊,这几乎肯定是名称混乱的问题

C++名称与链接的“C”类对应的名称被保存在链接器中,以便区分C++对非类函数的重载名称。

您可以将函数声明为
extern“C”
,以便使用C命名约定导出它。函数的主体仍然可以使用C++特性,但是它应该是F2PY或类似的。p>

注意,这阻止了您在函数名上使用C++名称重载。

为什么,您试图通过<代码> F2Py < /代码>生成C(和C++)函数的Python绑定?此程序用于为Fortran函数生成绑定。指示它可用于C和Fortran。看(虽然有点过时)。是的,这很有效。谢谢我在
foo.cpp
中的
void func…
之前添加了
extern“C”
。当然,如果你能找到一个cpp2py,那就更好了。
f2py foo.pyf -c foo.cpp -m foo
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: ./foo.so: undefined symbol: func_