Компиляция библиотеки complex_Bessel_function — соединение с кодом Fortran — mex файл

Я сделал код .cpp, который использует следующую онлайн-библиотеку:

Complex_Bessel_functions.

Я хочу сделать файл .mex из моего кода. Когда я печатаю:

mex GUSTAVsolution.cpp

Matlab дает следующие ошибки:

Error using mex
/tmp/mex_7456790284416_24518/GUSTAVsolution.o: In function `MIEsolution::Spherical_Hankel_function(unsigned int,
std::complex<double>, int)':
GUSTAVsolution.cpp:(.text+0x18c): undefined reference to `zbesh_wrap'
GUSTAVsolution.cpp:(.text+0x28e): undefined reference to `zbesh_wrap'
/tmp/mex_7456790284416_24518/GUSTAVsolution.o: In function `MIEsolution::Spherical_Bessel_function_2k(unsigned int,
std::complex<double>)':
GUSTAVsolution.cpp:(.text+0x3dc): undefined reference to `zbesy_wrap'
GUSTAVsolution.cpp:(.text+0x53d): undefined reference to `zbesj_wrap'
/tmp/mex_7456790284416_24518/GUSTAVsolution.o: In function `MIEsolution::Spherical_Bessel_function_1k(unsigned int,
std::complex<double>)':
GUSTAVsolution.cpp:(.text+0x7a0): undefined reference to `zbesj_wrap'
GUSTAVsolution.cpp:(.text+0x907): undefined reference to `zbesy_wrap'
/tmp/mex_7456790284416_24518/GUSTAVsolution.o: In function
`MIEsolution::Differentation_Spherical_Hankel_function(unsigned int, std::complex<double>, int)':
GUSTAVsolution.cpp:(.text+0xb32): undefined reference to `zbesh_wrap'
GUSTAVsolution.cpp:(.text+0xc4f): undefined reference to `zbesh_wrap'
GUSTAVsolution.cpp:(.text+0xd30): undefined reference to `zbesh_wrap'
GUSTAVsolution.cpp:(.text+0xe4d): undefined reference to `zbesh_wrap'
/tmp/mex_7456790284416_24518/GUSTAVsolution.o: In function
`MIEsolution::Differentation_Spherical_Bessel_function(unsigned int, std::complex<double>, int)':
GUSTAVsolution.cpp:(.text+0xfb8): undefined reference to `zbesj_wrap'
GUSTAVsolution.cpp:(.text+0x112b): undefined reference to `zbesy_wrap'
GUSTAVsolution.cpp:(.text+0x1303): undefined reference to `zbesj_wrap'
GUSTAVsolution.cpp:(.text+0x1476): undefined reference to `zbesy_wrap'
GUSTAVsolution.cpp:(.text+0x161a): undefined reference to `zbesy_wrap'
GUSTAVsolution.cpp:(.text+0x1787): undefined reference to `zbesj_wrap'
GUSTAVsolution.cpp:(.text+0x1935): undefined reference to `zbesy_wrap'
GUSTAVsolution.cpp:(.text+0x1aa2): undefined reference to `zbesj_wrap'
collect2: error: ld returned 1 exit status

Одна из моих функций, что эти ошибки происходят:

    complex<double> MIEsolution::Spherical_Bessel_function_2k(unsigned n,complex<double> z){

complex<double> Sb2k;

Sb2k = sph_besselY(n, z);

return Sb2k;

}

Дело в том, что эта библиотека соединяет некоторый код Fortran с C ++. Например, sph_besselY функция вызовет соответствующий код Фортрана zbesy_wrap,

Я предполагаю, чтобы компилировать функции Фортрана как-то? Я установил библиотеку так же, как и веб-страница. Кроме того, я импортирую библиотеку в мой код, например:

#include <complex_bessel.h>

1

Решение

Чтобы исправить это, добавьте флаг компоновщика. -lcomplex_bessel, как предлагается здесь:

Компилировать simpleTest.cpp ошибки

в Code :: Blocks IDE я установил этот флаг в Project->Build Options...->Linker Settings->Other linker options: текстовое окно.
Для mexЯ не знаю, если это mex GUSTAVsolution.cpp -lcomplex_bessel будет работать, но наверняка вы должны как-то добавить этот флаг компоновщика!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]