簡體   English   中英

在OSX 10.6上導入Python Sybase模塊時未定義的符號

[英]Undefined symbol when importing Python Sybase module on OSX 10.6

我試圖讓python-sybase模塊在OSX 10.6上工作,但我遇到了一些麻煩。

當我做

import Sybase

我明白了

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庫?

固定它。

問題是我鏈接的各種Sybase庫只有32位,但我在64位模式下運行Python。 修復程序只是在32位模式下運行python。

我使用命令defaults write com.apple.versioner.python Prefer-32-Bit -bool yes因為我對64位模式沒有任何特殊需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM