これは機能します:
cc leveldb_ext.cc leveldb_object.cc -o leveldb.so -I /usr/include/python2.7 -lpython2.7 -lleveldb -lsnappy -shared -lc
これは動作しません:
cc -I /usr/include/python2.7 -g -c leveldb_ext.cc leveldb_object.cc
ld -shared -o leveldb.so -lpython2.7 -lleveldb -lsnappy leveldb_ext.o leveldb_object.o -lc
どちらの場合も、コンパイラ/リンクエラーは発生しません。ただし、インポートしようとすると、次のエラーが発生します。
$ python -c "import leveldb"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: ./leveldb.so: undefined symbol: _ZNK7leveldb6Status8ToStringEv
なんで?2つの方法に違いはありますか?違いはなんですか?