Link static xapian to a share library
Yuan Fu
casouri at gmail.com
Thu Mar 24 21:39:50 GMT 2022
Hi,
I’m trying to link a static libxapian.a into my shared library, so that I can ship my library standalone. I compiled xapian with
./configure --disable-shared
make CPPFLAGS=-fPIC
And tried to link it to my shared library by
c++ mylib.o -o mylib.dylib -shared -fPIC -I/opt/local/include -Wl,-force_load /opt/local/lib/libxapian.a
-force_load is Mac’s equivalent to --whole-archive, only that it doesn’t need a --no-whole-archive.
I’m getting symbol not found error like this:
Undefined symbols for architecture x86_64:
"_deflate", referenced from:
ChertTable::add(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool) in libxapian.a(chert_table.o)
CompressionStream::compress(char const*, unsigned long*) in libxapian.a(compression_stream.o)
(maybe you meant: ChertTable::lazy_alloc_deflate_zstream() const, CompressionStream::lazy_alloc_deflate_zstream() )
"_deflateEnd", referenced from:
ChertTable::~ChertTable() in libxapian.a(chert_table.o)
CompressionStream::~CompressionStream() in libxapian.a(compression_stream.o)
"_deflateInit2_", referenced from:
ChertTable::lazy_alloc_deflate_zstream() const in libxapian.a(chert_table.o)
CompressionStream::lazy_alloc_deflate_zstream() in libxapian.a(compression_stream.o)
"_deflateReset", referenced from:
ChertTable::lazy_alloc_deflate_zstream() const in libxapian.a(chert_table.o)
CompressionStream::lazy_alloc_deflate_zstream() in libxapian.a(compression_stream.o)
"_inflate", referenced from:
ChertTable::read_tag(Cursor*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, bool) const in libxapian.a(chert_table.o)
CompressionStream::decompress_chunk(char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in libxapian.a(compression_stream.o)
(maybe you meant: CompressionStream::lazy_alloc_inflate_zstream(), ChertTable::lazy_alloc_inflate_zstream() const )
"_inflateEnd", referenced from:
ChertTable::~ChertTable() in libxapian.a(chert_table.o)
CompressionStream::~CompressionStream() in libxapian.a(compression_stream.o)
"_inflateInit2_", referenced from:
ChertTable::lazy_alloc_inflate_zstream() const in libxapian.a(chert_table.o)
CompressionStream::lazy_alloc_inflate_zstream() in libxapian.a(compression_stream.o)
"_inflateReset", referenced from:
ChertTable::lazy_alloc_inflate_zstream() const in libxapian.a(chert_table.o)
CompressionStream::lazy_alloc_inflate_zstream() in libxapian.a(compression_stream.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
It seems that libxapian.a is missing some symbols? Did I compile it wrong?
Thanks,
Yuan
More information about the Xapian-discuss
mailing list