I am not sure if I have some misunderstanding on ar -x
command, here's how to repeat the problem:
Step 1. make sure there are symbols are there:
$ nm librocksdb.a | c++filt | grep -s 'rocksdb::Footer::Footer'
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
0000000000000740 T rocksdb::Footer::Footer(unsigned long, unsigned int)
0000000000000740 T rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
Step 2. extract members from librocksdb.a
and try to find symbols:
$ ar -x librocksdb.a
$ nm *.o | c++filt | grep -s 'rocksdb::Footer::Footer'
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
U rocksdb::Footer::Footer(unsigned long, unsigned int)
We can notice that all symbols are Undefined now.
Can anyone help to explain why or if I use it in a wrong way?
(background: What I am intended to do is to extract all objects from multiple static libs and re-package them into one single static library)