2012-08-07 103 views
2

我開發一個C共享庫,使一個python腳本調用Python嵌入時。 當我運行該應用程序我得到這個錯誤:未定義的符號:PyExc_ImportError用C

Traceback (most recent call last): 
    File "/home/ubuntu/galaxy-es/lib/galaxy/earthsystem/gridftp_security/gridftp_acl_plugin.py", line 2, in <module> 
    import galaxy.eggs 
    File "/home/ubuntu/galaxy-es/lib/galaxy/eggs/__init__.py", line 5, in <module> 
    import os, sys, shutil, glob, urllib, urllib2, ConfigParser, HTMLParser, zipimport, zipfile 
    File "/usr/lib/python2.7/zipfile.py", line 6, in <module> 
    import io 
    File "/usr/lib/python2.7/io.py", line 60, in <module> 
    import _io 
ImportError: /usr/lib/python2.7/lib-dynload/_io.so: undefined symbol: PyExc_ImportError 

如果我嘗試從控制檯導入模塊IO可代替罰款:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import galaxy.eggs 
>>> 

在庫的編譯我用這個編譯器選項,建議在這裏: Embedding python in C, undefined symbol: PyExc_ImportError 另外我還添加了從 蟒蛇,配置--includes獲得的編譯器選項| --libs | --cflags | --ldflags

在這裏你可以找到庫的生成文件的日誌http://pastebin.com/348rhBjM

非常感謝,任何幫助都會有所幫助。

+0

的命令應該是這樣的:http://pastebin.com/jSqSnBj5,在這裏,而不是http://pastebin.com/348rhBjM你可以找到整個化妝日誌。 – user1515248 2012-08-07 09:40:28

+0

你有很多的警告,你真的應該檢查到!乍看之下,最嚴重的似乎是這樣的:'globus_gfs_acl_vm.c:260:33:warning:傳遞'snprintf'的參數2會使指針中的整數變爲無指針的指針。雖然可能無關您的問題,您應該_really_嘗試解決儘可能多的警告可能的! – 2012-08-07 09:46:15

回答

1

貼我用這樣的解決方法解決方案:從LIB-dynload plugins目錄的顯式連接(它只是在代碼,然後明確的dlopen)。與datetime.so例如:

cmake的:

SET (CMAKE_SHARED_LINKER_FLAGS "/usr/lib/python2.7/lib-dynload/datetime.so") 

或正如接頭參數添加到/usr/lib/python2.7/lib-dynload/datetime.so GCC 在命令行:

g++ -shared -o libfoo.so foo.o -lbar -lzab /usr/lib/python2.7/lib-dynload/datetime.so