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

14

我正在尝试在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@

在编程中,@符号代表着不同的含义,具体取决于使用的编程语言和上下文。在某些情况下,它可能表示一个注释或者调用函数时的参数。如果你遇到了错误,请提供更多的信息和代码内容以便其他人能够帮助你找到解决方案。


2
你可能需要安装 python-dev 包(与 @ 无关)。 - JBernardo
不要认为你需要Python的二进制文件。看起来你需要Python的.o文件,因为这是链接操作。 - Ishpeck
这个问题不应该在Serverfault上吗? - Aaron
2个回答

18

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

@符号表示该文件是符号链接;*表示它是可执行文件(这些是由ls -F产生的,您可能已经有了它作为别名)。


1
谢谢您的回复Petr,非常有启发性。运行locate后,我得到了两个位置:/opt/python2.7/lib/python2.7/config/ /usr/src/python2.7/Python-2.7.2/在这两个位置上运行LDFLAGS="-L/[path]"之后,我仍然遇到相同的错误。/usr/bin中也没有明显的变化。 - Mike
2
嗯...你是不是将它作为命令运行了?你不应该这样做,因为它正在设置一个环境变量,例如 LDFLAGS="-L/opt/python2.7/lib/python2.7/config/" ./configure 或者 LDFLAGS="-L/opt/python2.7/lib/python2.7/config/" make(我不知道MySQLdb的构建方式)。 - Petr Viktorin
啊,太好了!谢谢你,对我的误解感到抱歉。 - Mike

9
上面的解决方案对我并没有很大的帮助,因为我使用pip安装mysql-python,但是它确实指明了正确的方向。为了使和我处境一样的谷歌用户受益,我的解决方案是将Python安装目录下的libpython2.7.a符号链接到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。也许这是设计如此。符号链接是解决方案。 - Banjer
2
经过数小时的GCC错误排查,我终于找到了这个解决方案。在CentOS 6.5中,它完美地运行。我使用了ln -s /opt/python2.7/lib/python2.7/config/libpython2.7.a /usr/local/lib/。 - Max Ferguson
上面的评论真是救了我的一天。 - Manoj Purohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接