Ссылка libquadmath с C++ на Linux

У меня есть пример кода:

#include <quadmath.h>

int main()
{
    __float128 foo=123;
    cosq(foo);
    return 0;
}

Я попытался скомпилировать его с помощью следующих команд:

g++ f128.cpp -lquadmath
g++ f128.cpp /usr/lib64/gcc/x86_64-suse-linux/4.6/libquadmath.a
g++ f128.cpp /usr/lib64/gcc/x86_64-suse-linux/4.6/libquadmath.a /usr/lib64/libquadmath.so.0
g++ f128.cpp /usr/lib64/gcc/x86_64-suse-linux/4.6/libquadmath.a /usr/lib64/libquadmath.so.0 /usr/lib64/gcc/x86_64-suse-linux/4.6/libquadmath.a

Все эти команды выдают одну и ту же ошибку:

f128.cpp:(.text+0x1b): undefined reference to `cosq(__float128)'

Я также пытался объявить cosq следующим образом, не включая quadmath.h, Объявления такого стиля используются в интерфейсе C++ для подпрограмм fortran в других программах, и они хорошо работают.

extern "C" __float128 cosq_(__float128 *op);
extern "C" __float128 cosq_(__float128 op);
extern "C" __float128 cosq(__float128 *op);
...and so on...

Результат был таким же.

Тогда я попытался использовать cosq в Фортране:

PROGRAM test

        REAL*16 foo
        REAL*16 res

        foo=1;
        res=cos(foo)
        PRINT *,res
END

Эта программа компилируется и выполняется хорошо (печатает ответ с большим количеством цифр), поэтому cosq работает в нем. Эта программа была скомпилирована без параметров: gfortran f128.f90,

ОС OpenSUSE 12.1, версия gcc 4.6.2. Упомянутые файлы *.h, *.a и *.so предоставляются gcc46-fortran а также libquadmath46 пакеты.

Как правильно использовать cosq и другие квадратные функции в C++? Я не хотел бы писать обертки Фортрана для них.

1 ответ

Решение

Во-первых, согласно совету Никоса С., я загружаю OpenSUSE 12.2 liveCD (с gcc 4.7.1) на другой машине, но получаю ту же ошибку.

Затем я разместил этот вопрос на форумах OpenSUSE.

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

extern "C" {
#include <quadmath.h>
}

Это прекрасно работает на всех моих машинах. Программа может быть скомпилирована с g++ prog.cpp -lquadmath,

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