在OSX 10.6上导入Python Sybase模块时出现未定义符号错误。

4
我是一位有用的助手,下面为你翻译相关内容:

我正在尝试在 OSX 10.6 上让 python-sybase 模块工作,但我遇到了一些问题。

当我执行以下命令时:

import Sybase

I get

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "Sybase.py", line 15, in <module>
    from sybasect import *
ImportError: dlopen(/Library/Python/2.6/site-packages/python_sybase-0.40pre2-py2.6-macosx-10.6-universal.egg/sybasect.so, 2): Symbol not found: _blk_alloc
  Referenced from: /Library/Python/2.6/site-packages/python_sybase-0.40pre2-py2.6-macosx-10.6-universal.egg/sybasect.so
  Expected in: flat namespace
 in /Library/Python/2.6/site-packages/python_sybase-0.40pre2-py2.6-macosx-10.6-universal.egg/sybasect.so

我查看了sybasect.so,确实发现_blk_alloc未定义。该函数位于Sybase的sybblk.dylib中,已安装,并且其所在目录在LD_LIBRARY_PATH中。
当我使用python setup.py build编译python-sybase时,gcc命令似乎正确找到了所有正确的库,但由于某种原因,在将sybasect.so安装到Python模块目录后,这些库似乎未被链接。
gcc命令如下:
gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -arch i386 -arch ppc -arch x86_64 build/temp.macosx-10.6-universal-2.6/blk.o build/temp.macosx-10.6-universal-2.6/databuf.o build/temp.macosx-10.6-universal-2.6/cmd.o build/temp.macosx-10.6-universal-2.6/conn.o build/temp.macosx-10.6-universal-2.6/ctx.o build/temp.macosx-10.6-universal-2.6/datafmt.o build/temp.macosx-10.6-universal-2.6/iodesc.o build/temp.macosx-10.6-universal-2.6/locale.o build/temp.macosx-10.6-universal-2.6/msgs.o build/temp.macosx-10.6-universal-2.6/numeric.o build/temp.macosx-10.6-universal-2.6/money.o build/temp.macosx-10.6-universal-2.6/datetime.o build/temp.macosx-10.6-universal-2.6/date.o build/temp.macosx-10.6-universal-2.6/sybasect.o -L/Applications/Sybase/System/OCS-15_0/lib -lsybblk -lsybct -lsybcs -lsybtcl -lsybcomn -lsybintl -lsybunic -o build/lib.macosx-10.6-universal-2.6/sybasect.so

-L/Applications/Sybase/System/OCS-15_0/lib 位置是正确的,该文件夹包含了所有正确的 .dylib 文件。

当我运行 otool 命令时,输出如下:

$ otool -L build/lib.macosx-10.6-universal-2.6/sybasect.so
build/lib.macosx-10.6-universal-2.6/sybasect.so:
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)

我原本希望在这里看到Sybase库。

我对Mac上的链接还不是很熟悉。如何确保sybasect.so引用了Sybase库?

1个回答

1

已解决。

问题出在我连接的各种Sybase库只支持32位,但是我在64位模式下运行Python。解决方法就是在32位模式下运行Python。

我使用了命令defaults write com.apple.versioner.python Prefer-32-Bit -bool yes,因为我没有特别需要64位模式。


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