我正在尝试关联 c ++ 和 fortran 例程,但收到错误消息: undefined reference to '__gxx_personality_v0'
。我找到了几个人发现同样问题的帖子,因为他们使用的是gcc编译器而不是g ++,但在我的情况下我使用的是 g ++ 编译器,但我仍然遇到了这个问题。在下面我解释我做了什么,以便有专业知识的人能够很好地理解问题并帮助我:)提前谢谢! 我将非常感谢你的帮助......因为这个问题我被困了几个小时!!
我编译了c ++例程(这没有任何问题)
$ g++ -c read.cpp -o read.o
$ g++ -c write.cpp -o write.o
2)我编译了Fortran例程和主程序(这也适用)
$ 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
),但仍然得到与之前相同的错误消息...
任何人都知道发生了什么事?
再次感谢!