Связывание скомпилированной библиотеки 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 ++, что, возможно, не вариант.