Ld错误符号
问题描述:
我是用boost.python库构建的应用程序。我想链接它。下面是代码:Ld错误符号
#include <boost/python.hpp>
using namespace boost::python;
// Boost.python definitions to expose classes to Python
BOOST_PYTHON_MODULE(arrayClasses) {
}
和Makefile吧:
PYTHON = /usr/include/python2.7
BOOST_INC = /usr/include
BOOST_LIB = /usr/lib
TARGET = arrayClasses
$(TARGET).so: $(TARGET).o
g++ -shared -Wl,--export-dynamic \
$(TARGET).o -L$(BOOST_LIB) -lboost_python \
-L/usr/lib/python2.7/config -lpython2.7 \
-o $(TARGET).so
$(TARGET).o: $(TARGET).cpp
g++ -I$(PYTHON) -I$(BOOST_INC) -c -fPIC $(TARGET).cpp
当我编译它,我得到:
g++ -shared -Wl,--export-dynamic \
arrayClasses.o -L/usr/lib -lboost_python \
-L/usr/lib/python2.7/config -lpython2.7 \
-o arrayClasses.so
/usr/bin/ld: arrayClasses.o: relocation R_X86_64_32 against `init_module_arrayClasses()' can not be used when making a shared object; recompile with -fPIC
arrayClasses.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
什么是错的呢?
答
你有
-fPIC
您.o
的目标,但不是 为.so
目标。看看是否添加它有帮助。
编辑:忽略这一点。这为我编译使用Python 2.6和Boost 1.44的32位Ubuntu系统。正如Ignacio Vazquez-Abrams指出的,您应该检查您的Python和Boost库是否为相同的体系结构编译。