C ++: символы потери ar -x - PullRequest
2 голосов
/ 24 мая 2019

Я не уверен, что у меня возникло какое-то недопонимание по команде 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 не определены.

Может кто-нибудь помочь объяснить, почему или если я использую это неправильно?

(справочная информация: я собираюсь извлечь все объекты из нескольких статических библиотек и упаковать их в одну статическую библиотеку)

...