c++ - 如何以及何时执行静态链接 (MinGW)?

标签 c++ static linker mingw fortran

在将 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/

相关文章:

c++ - 将路径传递给 CreateProcessA

c - 在 main 中递增全局静态 int

c - 用静态关键字 : what is static, 声明的数组是指针还是整个数组?

c++ - 链接器问题 VS2015。 LNK2019 和 LNK2001 未解析的外部符号

gcc - gcc "-Xlinker"和 "-Wl,"选项之间的区别?

c++ - 如何在不区分大小写的情况下检查文本文件是否为回文

iphone - 使用将网络用于 iphone 应用程序 objective-c 的 c/c++ 库

c - C工程编译的时候怎么最后没有创建main.o?

c++ - 有没有办法可以同时运行 3 个 CreateWindow 函数?

objective-c - 如何释放静态 Objective-C 变量