gpt4 book ai didi

python - boost python编译模块中缺少库

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:40 27 4
gpt4 key购买 nike

我在使用 Boost Python 编译和运行一个简单的 hello world 示例时遇到问题。在以前的安装(在家里)中,我能够使用 sudo 命令在/usr/local/中安装 Boost,但在我当前的位置我没有管理员访问权限,所以我不得不将它安装在另一个目录中 (./boost_1_55_0) .

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

ImportError: libboost_python.so.1.55.0: cannot open shared object file: No such file or directory

此共享对象确实存在于 ./boost_1_55_0/stage/lib 目录中。因此,在寻找我的答案时,我尝试将以下内容添加到我的 Python 脚本中:

import os
os.environ['LD_LIBRARY_PATH']='./boost_1_55_0/stage/lib/'

但我得到了相同的结果。在所有情况下,我也尝试过绝对路径。此外,我查看了以下 stackoverflow 问题:

set LD_LIBRARY_PATH from Makefile

并尝试实现它但没有成功。我附上了 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);
}

test_helloworld.py:

import os
os.environ['LD_LIBRARY_PATH']='./boost_1_55_0/stage/lib/'

#import EvoAlgs
import evoalg_gen
print hello_ext.greet()

设置.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

出现以下错误:

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/'.

关于python - boost python编译模块中缺少库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com