Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导入我的c++;模块? 我一直致力于在C++中编写Python模块。我有一个C++,可以自己运行。它工作得很好,但我认为如果我能像Python中的函数一样调用它会更好。所以我尽了最大的努力,构建并安装了它。以下是我的模块(称为nnrunner.cpp)的代码:_Python_C++ - Fatal编程技术网

导入我的c++;模块? 我一直致力于在C++中编写Python模块。我有一个C++,可以自己运行。它工作得很好,但我认为如果我能像Python中的函数一样调用它会更好。所以我尽了最大的努力,构建并安装了它。以下是我的模块(称为nnrunner.cpp)的代码:

导入我的c++;模块? 我一直致力于在C++中编写Python模块。我有一个C++,可以自己运行。它工作得很好,但我认为如果我能像Python中的函数一样调用它会更好。所以我尽了最大的努力,构建并安装了它。以下是我的模块(称为nnrunner.cpp)的代码:,python,c++,Python,C++,由于依赖关系,它必须使用-lglut-lGL-lGLU进行编译,但实际上它没有任何UI。 我可以编译并安装它(python setup.py build,python setup.py install),但当我尝试导入它时,会出现错误: Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:53:06) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux Type "help

由于依赖关系,它必须使用
-lglut-lGL-lGLU
进行编译,但实际上它没有任何UI。 我可以编译并安装它(
python setup.py build
python setup.py install
),但当我尝试导入它时,会出现错误:

Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import nnrunner
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /home/justin/anaconda3/lib/python3.5/site-packages/nnrunner.cpython-35m-x86_64-linux-gnu.so: undefined symbol: _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE
>>> 
Python 3.5.2 | Anaconda 4.2.0(64位)|(默认,2016年7月2日,17:53:06)
linux上的[GCC 4.4.7 20120313(Red Hat 4.4.7-1)]
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入nnrunner
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ImportError:/home/justin/anaconda3/lib/python3.5/site-packages/nnrunner.cpython-35m-x86_64-linux-gnu.so:未定义的符号:_ZTVNSt7__cx1115基本_stringbufIcSt11char_traitssiceee
>>> 

有人能给我指一下这方面的文档吗?这是我第一次尝试在C++中制作Python模块。

最有可能意味着你正在导入一个共享库,它有一个与Python分布不兼容的二进制接口。p> 所以在您的例子中:您有一个64位的Python,您正在导入一个32位的库,反之亦然。(或者正如评论中所建议的,使用了不同的编译器)。

对cython模块也有类似的问题。我猜编译器和Anaconda库之间存在不兼容问题


通过升级Anaconda
libgcc
包解决了这个问题:
conda安装libgcc

或者可能是一个不同的编译器。在OS X上编译C时经常发生这种情况。我知道我有一个64位Python解释器。为了清楚起见,您是说我包含的
可能是32位的,或者其他类似的库是32位的?我该如何计算特定的库是32位还是64位?或者它是用不同于Python构建脚本使用的编译器编译的?@justinrixx否。我是说您使用的编译器生成32位二进制文件。这是一种可能性。另一种可能性是,生成Anaconda可执行文件的编译器与生成lib文件的编译器不同。尝试将库导入Linux发行版附带的标准Python。您使用的是什么Linux发行版?如果是Debian/Ubuntu,请使用
sudo安装python3
,然后运行
python3
,导入您的模块,看看会发生什么。@quantumphysician是的,我正在使用Ubuntu。当我使用蟒蛇3时,我得到了与我使用蟒蛇时相同的错误。当我运行
python setup.py build
时,它运行了一些g++的东西。但是构建的
.so
不应该与默认解释器(我认为是Anaconda)的架构相同吗?@justinrixx Anaconda是Python的一个发行版。尝试安装Ubuntu附带的本机Python。老实说,我不明白为什么你会在Ubuntu上需要Anaconda,但无论如何,我们必须确保你明白Anaconda是Python在你的操作系统上的外国发行版,并且可能是用不同的编译器编译的。我需要您尝试在操作系统的本机Python上导入库。它应该位于
/usr/bin/Python3
(或类似位置)。
from distutils.core import setup, Extension

module1 = Extension('nnrunner',
                    sources = ['nnrunner.cpp', 'game.cpp', 'uiDraw.cpp', 
                    'uiInteract.cpp', 'player.cpp', 'ship.cpp', 'network.cpp'],
                    libraries = ['glut', 'GL', 'GLU'])

setup (name = 'NNRunner',
       version = '1.0',
       description = 'This is my first package',
       ext_modules = [module1])
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import nnrunner
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /home/justin/anaconda3/lib/python3.5/site-packages/nnrunner.cpython-35m-x86_64-linux-gnu.so: undefined symbol: _ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE
>>>