Я пытаюсь связать C ++ а также Фортран процедуры, но я получаю сообщение об ошибке: undefined reference to '__gxx_personality_v0'
. Я нашел несколько постов, где люди находили ту же самую проблему, потому что они использовали компилятор gcc вместо g ++, однако в моем случае я использую г ++ компилятор и до сих пор я получаю эту проблему. Далее я объясню, что я сделал, чтобы кто-то с опытом мог хорошо понять проблему и помочь мне 🙂 Заранее спасибо !! Я буду признателен за вашу помощь … Я застрял на несколько часов из-за этого!
Я скомпилировал подпрограммы C ++ (это работает без проблем)
$ g++ -c read.cpp -o read.o
$ g++ -c write.cpp -o write.o
2) Я скомпилировал подпрограммы и основную программу на Фортране (это тоже работает)
$ gfortran -c main.f -o main.o
3) Я пытался связать обе части:
$ gfortran -lm -lstdc++ main.o read.o write.o -o main_new.x
и вот где я получаю сообщение об ошибке:
read.o:read.cpp:(.eh_frame+0x13): undefined reference to '__gxx_personality_v0'
write.o:write.cpp:(.eh_frame+0x4b):undefined reference to '__gxx_personality_v0'
/usr/lib/gcc/i686-pc-cygwin/4.8.2/../../../libcygwin.a(_cygwin_crt0_common.o):_cygwin_crt0_common.cc:(.data+0x4): undefined reference to `operator new[](unsigned int)'
/usr/lib/gcc/i686-pc-cygwin/4.8.2/../../../libcygwin.a(_cygwin_crt0_common.o):_cygwin_crt0_common.cc:(.data+0x8): undefined reference to `operator delete(void*)'
Похоже, что некоторые библиотеки по-прежнему отсутствуют или компилятор не может их найти, поэтому я подумал, что можно указать полный путь к библиотекам. Однако, когда я их искал, у меня было несколько путей, и я не Понятия не имею, какой из них я должен использовать:
$ find /usr -name libstdc++.a
/usr/lib/gcc/i686-pc-cygwin/4.8.2/libstdc++.a
/usr/lib/gcc/i686-pc-mingw32/4.7.3/debug/libstdc++.a
/usr/lib/gcc/i686-pc-mingw32/4.7.3/libstdc++.a
/usr/lib/gcc/i686-w64-mingw32/4.8.2/libstdc++.a
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/libstdc++.a
/usr/lib/gcc/x86_64-w64-mingw32/4.8.2/libstdc++.a
$ find /usr -name libm.a
/usr/i686-pc-mingw32/sys-root/mingw/lib/libm.a
/usr/i686-w64-mingw32/sys-root/mingw/lib/libm.a
/usr/x86_64-pc-cygwin/sys-root/usr/lib/libm.a
/usr/x86_64-w64-mingw32/sys-root/mingw/lib/libm.a
/usr/lib/libm.a
Я пробовал с первым путем для обеих библиотек ( $ gfortran -L/usr/i686-pc-mingw32/sys-root/mingw/lib/libm.a -L/usr/lib/gcc/i686-pc-cygwin/4.8.2/libstdc++.a read.o write.o main.o -o main_new.x
) и все равно я получаю то же сообщение об ошибке, что и раньше …
Кто-нибудь знает, что происходит?
Еще раз спасибо!
Задача ещё не решена.
Других решений пока нет …