2017-01-30 11 views
2

Я знаю, как увидеть, какие библиотеки определенного компонент для соответствует своему с помощью команды:Где я вижу, какие части библиотеки LLVM содержат?

llvm-config --libs core 

Теперь предположим, что я получаю ошибку компоновщика и хочу включить другую библиотеку, чтобы решить ее.

Скажем, компоновщик не может решить какой-либо символ A. Затем как сделать:

1) Найдите библиотеку, содержащую определенный символ, например, например. LLVMCore.lib.

2) Посмотрите содержимое библиотек, чтобы узнать, какие символы он определяет?

Я не понимаю, как это сделать, прочитав документацию.

ответ

2

Как вы уже открыли для себя правильный LLVM-способ сделать это было бы с помощью llvm-config, указав на компоненты вы намерены ссылаться или использовать, например

llvm-config --cxxflags --ldflags --system-libs --libs core 

Другие распространенные без LLVM специфические методы, которые вы можете использовать, чтобы найти символ: на платформе Win (использование VS нативные инструменты CMD или эквивалент среды набора один):

for %f in (*.lib) do (dumpbin.exe /symbols %f | findstr /C:"your_symbol") 

если вы не может справиться с ограничениями findstr. GNU grep может быть лучшим выбором. Если у вас установлены средства Unix и в вашем PATH вы также можете использовать

for %f in (*.lib) do (nm -gC %f | findstr /C:"your_symbol") 

в baddger964 предлагает.

В системе UNIX:

for lib in $(find . -name \*.so) ; do nm -gC $lib | grep my_symbol | grep -v " U " ; done 

(поиск *.so библиотеки в этом каталоге для my_symbol; ехЬегп только, demangle и исключить неопределенные символы)

Учитывая вышеизложенный вопрос 2 тривиален.

+0

Спасибо за ваш ответ. Не могли бы вы также предоставить команду 'grep', используемую для поиска символа в Linux? Так ли LLVM-программисты обычно разрешают свои символы, т. Е. Находит библиотеку, которая ее содержит? – Shuzheng

+0

@Shuzheng Отредактировано и добавлено больше информации –

+0

Спасибо, за ваш ответ. Это полно и удовлетворяет :-) Последний вопрос, знаете ли вы какой-либо ресурс, где определены «компоненты»? Прямо сейчас я использую 'llvm-config', чтобы узнать, к каким библиотекам относится компонент. Тем не менее, было бы неплохо, если бы появился какой-то ressource, говорящий: «Эти части исходного кода LLVM помещаются в эту библиотеку» и «Этот компонент охватывает библиотеки, соответствующие этим частям источника». Таким образом, если я вижу, что символ определен в 'someheader.hpp', я могу сразу найти соответствующую библиотеку. – Shuzheng

1

Один из способов, чтобы увидеть символы вашей библиотеки, чтобы использовать команду нм:

nm -gC mylib.so