ld错误符号

Posted

技术标签:

【中文标题】ld错误符号【英文标题】:Ld wrong symbol 【发布时间】:2011-07-12 05:54:32 【问题描述】:

我正在使用 boost.python 库构建应用程序。我想链接它。代码如下:

#include <boost/python.hpp>
using namespace boost::python;

// Boost.python definitions to expose classes to Python
BOOST_PYTHON_MODULE(arrayClasses) 

并为其生成文件:

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

有什么问题吗?

【问题讨论】:

【参考方案1】:

您的.o 目标有-fPIC,但没有 对于.so 目标。看看添加它是否有帮助。

编辑:忽略。这在使用 Python 2.6 和 Boost 1.44 的 32 位 Ubuntu 系统上为我编译。正如 Ignacio Vazquez-Abrams 指出的那样,您可能应该检查您的 Python 和 Boost 库是否针对相同的架构进行了编译。

【讨论】:

以上是关于ld错误符号的主要内容,如果未能解决你的问题,请参考以下文章

C++ 库编程错误:ld:未找到架构 x86_64 的符号

错误消息:在 crt1.10.6.ol 开始 ld:找不到符号 collect2:ld 返回 1 个退出状态

ld:未找到架构 i386 的符号 clang:错误:在为 Google App Invytes iOS 集成可可豆荚后

ld:未找到架构 i386 Xcode 单元测试的符号

错误:未找到架构 x86_64 的符号,collect2:ld 返回 1 退出状态

iPhone 错误 ld:/Users/Shared/PhoneGap/Frameworks/PhoneGap.framework/PhoneGap 中的重复符号 _SBJSONErrorDomain