Связывание скомпилированной библиотеки pgi с компоновщиком gcc

Я хотел бы знать, как связать скомпилированный код pgC++ (blabla.a) с основным кодом, скомпилированным с помощью компилятора GNU C++ или g ++. На данный момент при линковке с компоновщиком gnu C++ по умолчанию выдается следующее сообщение: неопределенная ссылка на `__pgio_initu'

2 ответа

Решение

Как уже указывал предыдущий человек, PGI поддерживает искажение имени G++ при использовании pgc++ команда. Судя по этим выводам, я предполагаю, что вы связываетесь с g ++, а не с pgC++. У меня был наибольший успех при использовании pgC++ в качестве компоновщика, чтобы он находил библиотеки PGI. Если это не вариант, вы можете связать исполняемый файл с pgc++ -dryrun чтобы получить полную линию связи и мимо -L а также -l варианты оттуда, чтобы получить те же библиотеки.

Различные компиляторы C++ используют разные соглашения о распределении имен для генерации имен, которые они предоставляют компоновщику, поэтому имя функции-члена int A::foo(int) будет передан компоновщику компилятору A в виде одной строки goobledegook, а компилятором B - совсем другой строкой goobledegook, и компоновщик не сможет узнать, что они ссылаются на одну и ту же функцию. Следовательно, вы не можете связывать объектные файлы, созданные различными компиляторами C++, если они не используют одно и то же соглашение об именовании (и, возможно, даже тогда: сопоставление имен - это только один аспект совместимости ABI).

При этом, согласно этому документу, PGC++ поддерживал совместимость преобразования имен с g++ 3 с половиной года назад, при условии, что компилятор PGI C++ вызывался именно с помощью команды pgc++ или же pgcpp --gnu , Может случиться так, что библиотека, с которой вы имеете дело, была построена не таким особым образом, или, возможно, была построена с более старым компилятором PGI C++.

Во всяком случае, если G ++ компилирует заголовки вашего blabla.a и испускает разные символы из тех, что в blabla.a, вы не можете связать код G ++ с blabla.a, Вам нужно будет восстановить blabla.a с g ++, что, возможно, не вариант.

Другие вопросы по тегам