2013-12-16 2 views
3

Скомпилировать и связать стороннюю библиотеку с GCC 4.7.3. Я пытаюсь понять, что вызывает неопределенную ошибку символа:необходимо выяснить, где была создана эта функция (gcc 4.7)

Undefined symbols for architecture x86_64: 
"void MyObject::myFunction<....>(...) const", referenced from: 
    void NameSpace::AnotherFunction<some_particular_arguments>(...) in some_source.cc.o 

NameSpace::AnotherFunction, очевидно, сидит в some_source.cc, но я могу получить некоторую информацию от компилятора/линкера о том, где/кто экземпляр этой функции с some_particular_arguments?

Сборка выполняется с использованием CMake и существует NameSpace_AnotherFunction.inst с экземплярами шаблонов для соответствующей функции, но этого конкретного набора аргументов шаблона нет.

Очевидно, что нет конкретизации в some_source.cc, в противном случае я бы не спросить;)

Так мне интересно, если есть способ, чтобы получить информацию о чем-то вроде точки Инстанцирование (или аналогичный) для этого списка аргументов частности шаблона функции AnotherFunction?

+0

найти в файлах?, Это будет работать, если экземпляр, который использует эту функцию, находится в видимом коде. Если в библиотеке нужна другая библиотека, вам понадобится инструмент проверки библиотеки, чтобы найти ссылки на нее. – Raxvan

+0

«Неопределенные символы для архитектуры x86_64» выглядит как сообщение компоновщика, которое распознает неподдерживаемую архитектуру. Может быть, аргумент шаблона, который вы предоставляете, недоступен для x86_64? –

+0

@ Raxvan Я пытался найти его в файлах, но не вижу его. Функция является функцией библиотеки и не нуждается в другой. – Denis

ответ

1

Сначала скомпилируйте флаг -g, чтобы получить файл объекта с исходным файлом и информацией о номере линии для каждого символа. Затем используйте команду nm с параметрами -C и -l в объектном файле, чтобы распечатать информацию о символе, grepping для AnotherFunction. Это должно дать вам номера строк.

Редактировать: Теперь, когда у меня была возможность попробовать это, я не думаю, что он решает проблему Дениса. К сожалению, указанная строка - это строка, на которой определяется шаблон функции, а не строка, в которой она была создана. Если оставить этот ответ здесь, в любом случае, если это полезно кому-то еще ...

+0

спасибо за ваш ответ, я попробую сейчас ... – Denis

Смежные вопросы