Я не уверен, что у меня возникло какое-то недопонимание по команде ar -x
, как повторить проблему:
Шаг 1. Убедитесь, что есть символы:
$ 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)
Шаг 2. Извлечение членов из librocksdb.a
и попытка найти символы:
$ 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)
Мы можем заметить, что все символы U не определены.
Может кто-нибудь помочь объяснить, почему или если я использую это неправильно?
(справочная информация: я собираюсь извлечь все объекты из нескольких статических библиотек и упаковать их в одну статическую библиотеку)