Порт с gcc 3.3.3 до 4.1.0, шаблоны C ++, неопределенная ссылка на - PullRequest
0 голосов
/ 01 июня 2009

Наше приложение использует шаблоны C ++ во многих местах. В настоящее время я пытаюсь портировать с gcc 3.3.3 на 4.1.0 и сталкиваюсь с проблемами. Я воссоздал проблему в небольшой общей библиотеке и исполняемом файле. Я создаю библиотеку общего ресурса. Хорошо, но исполняемый файл не может связать со следующим:

    undefined reference to `MyNumber<int>::~MyNumber()'
    undefined reference to `MyNumber<int>::MyNumber(int)'
    undefined reference to `MyNumber<int>::number()'

Я не использую классы шаблонов непосредственно в исполняемом файле и ожидал, что все это будет инкапсулировано в реализацию в разделяемой библиотеке (вероятно, наивно).

Проблема появляется только при работе с общей библиотекой. Когда я создаю наше приложение на SLES 11 (gcc 4.3.2), большинство моих проблем, кажется, решены, но я все еще получаю ряд следующих сообщений:

    undefined reference to `vtable for MYCLASS<T1, T2>'

Это все при связывании исполняемого файла с общими библиотеками.

Ответы [ 4 ]

5 голосов
/ 01 июня 2009

Это до боли непонятное сообщение, но оно означает, что вы не определили виртуальную функцию, см. здесь

2 голосов
/ 01 июня 2009

У меня была похожая проблема, и я решил ее, реализовав функции в заголовочном файле, а не в файле cpp.

Salu2.

0 голосов
/ 04 июня 2009

Спасибо за комментарии. Я удалил -frepo и -fno-impicit-templates из параметров компиляции / ссылки, и все было хорошо.

0 голосов
/ 01 июня 2009

Не зная больше о вашем исходном коде, очень сложно ответить. Однако задание этого конкретного вопроса в списке рассылки gcc может дать лучшие результаты, так как люди, работающие над gcc, знают все тонкости лучше всех остальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...