Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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/152.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
boost python编译模块中缺少库_Python_C++_Boost - Fatal编程技术网

boost python编译模块中缺少库

boost python编译模块中缺少库,python,c++,boost,Python,C++,Boost,我在使用boostpython编译和运行一个简单的helloworld示例时遇到问题。在以前的安装(在家中)中,我可以使用sudo命令在/usr/local/中安装Boost,但在我当前的位置,我没有管理员访问权限,因此我必须将其安装在另一个目录中(./Boost\u 1\u 55\u 0) 代码似乎已编译,但当我运行示例python脚本时,会出现以下错误: ImportError: libboost_python.so.1.55.0: cannot open shared object fil

我在使用boostpython编译和运行一个简单的helloworld示例时遇到问题。在以前的安装(在家中)中,我可以使用sudo命令在/usr/local/中安装Boost,但在我当前的位置,我没有管理员访问权限,因此我必须将其安装在另一个目录中(./Boost\u 1\u 55\u 0)

代码似乎已编译,但当我运行示例python脚本时,会出现以下错误:

ImportError: libboost_python.so.1.55.0: cannot open shared object file: No such file or directory
LD_LIBRARY_PATH=./boost_1_55_0/stage/lib: Command not found.
此共享对象确实存在于./boost\u 1\u 55\u 0/stage/lib目录中。因此,在搜索我的答案时,我尝试将以下内容添加到我的Python脚本中:

import os
os.environ['LD_LIBRARY_PATH']='./boost_1_55_0/stage/lib/'
但我得到了同样的结果。在所有情况下,我也尝试过绝对路径。此外,我还研究了以下问题:

并试图实施,但没有运气。我已经附加了makefile、.cpp文件和测试脚本,以获得任何人可以提供的帮助。作为补充信息,我尝试使用distutils进行编译,但也无法实现。我也附上了python脚本

谢谢你的帮助

内森


生成文件:

# location of the Python header files

PYTHON_VERSION  = 2.7
PYTHON_INCLUDE  = /usr/local/python/canopy_1.1.0/appdata/canopy-1.1.0.1371.rh5-x86_64/include/python2.7
PYTHON_LIB  = /usr/local/python/canopy_1.1.0/appdata/canopy-1.1.0.1371.rh5-x86_64/lib

# location of the Boost Python include files and library

BOOST_INC = ./boost_1_55_0
BOOST_LIB = ./boost_1_55_0/stage/lib/

# compile mesh classes
TARGET = evoalg_gen

$(TARGET).so: $(TARGET).o
LD_LIBRARY_PATH=$(BOOST_LIB) g++ -shared -Wl,--export-dynamic $(TARGET).o -L$(BOOST_LIB) -L$(PYTHON_LIB) -lpython$(PYTHON_VERSION) -lboost_python -o $(TARGET).so

$(TARGET).o: $(TARGET).cpp
LD_LIBRARY_PATH=$(BOOST_LIB) g++ -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c $(TARGET).cpp

evoalg_gen.cpp:

#include <Python.h>
#include <boost/python.hpp>

char const* greet()
{
   return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

setup.py:

from distutils.core import setup, Extension

module1 = Extension('EvoAlgs',
include_dirs = ['/raid1/nathanm/9502_Model/c++/boost_1_55_0'], ### Boost Directory
library_dirs = [''#, ### Boost Library
                #'/usr/local/python/epd-7.1-2-rh5-x86_64/lib/' ### Python Library
                ],
libraries = ['boost_python'],
sources = ['evoalg_gen.cpp'])

setup (name = 'EvoAlgs',
version = '0.1',
description = 'This is a collection of evolutionary algorithms',
ext_modules = [module1])

其他信息:

运行命令:

LD_LIBRARY_PATH=./boost_1_55_0/stage/lib python test_helloworld.py
给出以下错误:

ImportError: libboost_python.so.1.55.0: cannot open shared object file: No such file or directory
LD_LIBRARY_PATH=./boost_1_55_0/stage/lib: Command not found.
按照@kirbyfan64sos的建议,将-rpath、./boost_1_55_0/stage/lib/添加到我的make文件中,运行时会导致以下错误:

ImportError: ./boost_1_55_0/stage/lib/libboost_python.so.1.55.0: undefined symbol: PyUnicodeUCS4_FromEncodedObject

为了使用LD_LIBRARY_PATH,必须在程序实际运行之前设置它,而不是在程序运行时(不执行任何操作)或编译时(仅为编译器本身设置路径)。例如:

LD_LIBRARY_PATH=./boost_1_55_0/stage/lib python my_script.py
但是,您可以使用'-Wl,-rpath',将库路径硬编码到库中。因此,在本例中,当链接时,您将使用'-Wl,-rpath/
boost_1_55_0/stage/lib/。

感谢您提供有关LD_LIBRARY_路径的信息。我尝试使用你的两个建议,但仍然无法执行测试脚本。当我使用您的第一个建议时,我得到一个错误,即未找到LD_LIBRARY\u PATH=./boost_1\u 55\u 0/stage/lib:Command。当我添加,-rpath,./boost\uu。。。为了编译并尝试运行,我得到了一个错误:libboost_python.so.1.55.0:undefined symbol:pyunicodedeucs4_FromEncodedObject。如果您能帮上忙,我们将不胜感激。@NateN:我不确定第一个错误是什么。第二个错误意味着它正在工作,但是有一些涉及unicode支持的问题。尝试在将“-enable unicode=ucs4”传递给配置脚本时重建Python。不幸的是,我认为我无法重建Python,因为我在计算机上没有管理员访问权限。我想我可以做的是在我的目录中构建一个自定义的python安装,并使用它。你的第一个答案确实消除了我最初的错误,所以这确实帮助了我@纳特姆:那应该很好用。请记住将新Python的路径放在user-config.jam中,然后重新构建库。