/usr/bin/ld: 找不到 -lpython2.7

Posted

技术标签:

【中文标题】/usr/bin/ld: 找不到 -lpython2.7【英文标题】:/usr/bin/ld: cannot find -lpython2.7 【发布时间】:2012-01-14 01:49:55 【问题描述】:

我正在尝试使用 Python 2.7 安装 mysqldb。我得到的错误如下所示:

gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 -I/usr/include/mysql -I/opt/python2.7/include/python2.7 -c _mysql.c -o build/temp.linux-x86_64-2.7/_mysql.o -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64
gcc -pthread -shared build/temp.linux-x86_64-2.7/_mysql.o -L/usr/lib64/mysql -L. -lmysqlclient_r -lz -lpthread -lcrypt -lnsl -lm -lpthread -lmygcc -lpython2.7 -o build/lib.linux-x86_64-2.7/_mysql.so
/usr/bin/ld: cannot find -lpython2.7
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1

显然,它找不到 Python 2.7。看着/usr/bin我看到了:

python*
python2@
python2.4*
python2.7@

@ 符号是什么意思?任何人都可以提出解决该错误的方法吗?

【问题讨论】:

你可能需要python-dev包(与@无关) 不要认为你想要 Python 二进制文件。看起来您需要 Python .o 文件,因为这是链接。 这个问题不应该是服务器故障吗? 【参考方案1】:

它找不到 Python 库,而不是可执行文件。运行 locate libpython2.7.a 以查看您的 Python 库所在的位置,并将其添加到库路径中(例如,如果它在 /opt/python2.7/lib 中,则您要调用 LDFLAGS="-L/opt/python2.7/lib" make)。

@ 符号表示文件是符号链接; * 表示它是可执行的(这些是由 ls -F 生成的,您可能将其用作别名)。

【讨论】:

感谢 Petr 的回复,内容非常丰富。运行 locate 后我的两个位置是: /opt/python2.7/lib/python2.7/config/ /usr/src/python2.7/Python-2.7.2/ 运行 LDFLAGS="-L/[path ]" 在这两个位置上,我仍然遇到相同的错误。 /usr/bin 也没有明显的变化。 嗯...您可能将其作为命令运行吗?你不应该,它设置了一个环境变量,如LDFLAGS="-L/opt/python2.7/lib/python2.7/config/" ./configureLDFLAGS="-L/opt/python2.7/lib/python2.7/config/" make(我不知道MySQLdb是如何构建的) 啊,完美!谢谢,对我的误解深表歉意。【参考方案2】:

当我使用 pip 安装 mysql-python 时,上述解决方案对我来说并不完全,但绝对是朝着正确方向迈出了一大步。为了任何从谷歌来到这里的人和我一样的人的利益,我的解决方案是将libpython2.7.a从python安装目录符号链接到lib目录:

ln -s /opt/python2.7.1/lib/python2.7/config/libpython2.7.a

/usr/local/lib/

pip install mysql-python 之后工作没有任何问题。

【讨论】:

这在 CentOS 6.3 上也适用于我。我尝试将/opt/python2.7.1/lib/python2.7/config 添加到/etc/ld.so.con.d/python2.7.conf 并运行sudo ldconfig,但Linux 没有将.a 文件添加到其库列表中,即ld.so.cache。也许这是设计使然。符号链接是解决方案。 经过数小时的 gcc 错误后,我终于找到了这个解决方案。这在 CentOS 6.5 中完美运行。我用过 ln -s /opt/python2.7/lib/python2.7/config/libpython2.7.a /usr/local/lib/ 上面的评论刚刚拯救了我的一天

以上是关于/usr/bin/ld: 找不到 -lpython2.7的主要内容,如果未能解决你的问题,请参考以下文章

/usr/bin/ld: 找不到 -ll

/usr/bin/ld: 找不到 -lpthreads

/usr/bin/ld: 找不到共享库

无法编译第一个 opencv 程序,'/usr/bin/ld: 找不到 -lcv'

/usr/bin/ld 找不到 -lbsd

gcc 错误“/usr/bin/ld: 找不到 -lstdc++”