在将 C++ 应用程序链接到另一个具有 Fortran90 依赖项(MinGW、TDM g++ 和 gfortran)的 C++ 库时,我遇到了很多麻烦。我要么必须使用 gfortran 进行链接,要么应用程序在启动时崩溃(在键入 __cxa_get_globals_fast 的全局构造函数中)。然而,这是 Not Acceptable ,我想使用 g++ 进行链接(Qt GUI)。
在我看来,库的依赖项不能与 gcc 静态链接,链接仅在 main()
可用时执行。为什么?
我猜部分是因为必须在 main() 之前插入用于某些初始化的代码。
为什么静态链接的应用程序在运行时需要DLL-s,例如mingwm10.dll或pthreadGCE2.dll?为什么这些不能静态链接?
更新:我刚找到这些网站:
http://www.deer-run.com/~hal/sol-static.txt
http://www.iecc.com/linker/
最佳答案
使用 gfortran 链接和使用 ld/gcc/g++ 链接之间的主要区别是 gfortran 默认链接标准 fortran 库,而使用另一个链接器您需要手动指定要链接的库。我无法通过快速搜索找到它们,但它应该与 -lgfortran 一致。
另外,gfortran 有一些特定的 instructions for initialisation routines如果您的主程序不是用 Fortran 编写的,则需要调用某些 Fortran 内部函数才能工作。如果您没有调用这些例程,那么这可能会导致崩溃。
关于c++ - 如何以及何时执行静态链接 (MinGW)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404898/