Python导入错误:符号未找到,但符号不在文件中
我在尝试导入 ssrc.spread
时遇到了这个错误:
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ssrc/_spread.so, 2): 找不到符号: __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
这个文件(_spread.so
)里包含了这个符号:
$ nm _spread.so | grep _ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
U __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
U __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
(出现两次,因为这个文件是一个包含ppc和x86两种格式的二进制文件)
编辑:
好吧,正如James所指出的,U表示这个符号是未定义的,但这个对象文件需要它。
经过进一步的调查,我注意到(我本该先查看的地方……)在编译时出现了这些链接错误:
CC=g++ CXX=g++ g++-4.0 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -O3 -I../.. -I../.. -I/usr/local/include -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -O2 -I/usr/local/include -std=c++98 -pipe -fno-gnu-keywords -fvisibility-inlines-hidden -o SsrcSpread.o -c SsrcSpread.cc
CC=g++ CXX=g++ /bin/sh ../../libtool --tag=CXX --mode=link g++-4.0 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -bundle -undefined dynamic_lookup -F/Library/Frameworks -framework Python \
-pthread -D_REENTRANT -pedantic -Wall -Wno-long-long -Winline -Woverloaded-virtual -Wold-style-cast -Wsign-promo -L../../ssrc -lssrcspread -L/usr/local/lib -ltspread-core -o _spread.so SsrcSpread.o
mkdir .libs
g++-4.0 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -bundle -undefined dynamic_lookup -F/Library/Frameworks -framework Python -pthread -D_REENTRANT -pedantic -Wall -Wno-long-long -Winline -Woverloaded-virtual -Wold-style-cast -Wsign-promo -o _spread.so SsrcSpread.o -Wl,-bind_at_load -L/Dev/libssrcspread-1.0.6/ssrc /Dev/libssrcspread-1.0.6/ssrc/.libs/libssrcspread.a -L/usr/local/lib -ltspread-core
ld: warning: in ~/Dev/libssrcspread-1.0.6/ssrc/.libs/libssrcspread.a, file was built for unsupported file format which is not the architecture being linked (ppc)
ld: warning: in /Developer/SDKs/MacOSX10.4u.sdk/usr/local/lib/libtspread-core.dylib, file was built for unsupported file format which is not the architecture being linked (ppc)
ld: warning: in /Dev/libssrcspread-1.0.6/ssrc/.libs/libssrcspread.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Developer/SDKs/MacOSX10.4u.sdk/usr/local/lib/libtspread-core.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
我也不太确定10.4的sdk是否适合用来编译python模块(但切换到10.6似乎也没有帮助)。
1 个回答
2
$ nm _spread.so | grep _ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
U __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
U __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
_spread.so 文件没有包含某个符号,它是依赖于这个符号的。这里的 U
表示未定义。
我觉得可能在某个地方版本不匹配,可能是头文件和库文件之间的版本不一致。你有安装多个版本吗?