ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在OSX 10.6上导入Python Sybase模块时未定义的符号

2019-07-09 00:57:02  阅读:338  来源: 互联网

标签:python dynamic-linking macos sybase dylib


我试图让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位模式没有任何特殊需要.

标签:python,dynamic-linking,macos,sybase,dylib
来源: https://codeday.me/bug/20190709/1407733.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有