gpt4 book ai didi

linker - 链接具有相互依赖关系的静态 fortran 库

转载 作者:行者123 更新时间:2023-12-04 21:16:44 25 4
gpt4 key购买 nike

我正在开发一个 Fortran 程序 prog1和两个 Fortran 库,lib1lib2 . prog1取决于 lib1lib2 , 和 lib1还取决于 lib2 .目录结构可能如下所示:

prog1
|- lib2
|- lib1
|- lib2

在某些情况下,我想要 prog1使用不同版本的 lib2比什么 lib1用途。但是,如果静态库 lib1.a包括来自 lib2 的目标文件,链接器给了我这样的错误
./lib1/lib1.a(lib2_module.o): In function `__lib2_module_MOD_function1':
./lib2/src/lib2_module.f90:12: multiple definition of `__lib2_module_MOD_function1'
./lib2/lib2.a(lib2_module.o):./lib2/src/lib2_module.f90:12: first defined here

换句话说,链接器很困惑,因为两个库都包含相同的目标文件 lib2_module.o。 ,但有不同的版本。

所以我的问题是:两个 Fortran 库如何包含(和使用)相同目标文件的不同版本?

最佳答案

我认为不可能通过使用静态库来做到这一点。这是因为从 prog1 来看,lib2 模块中的 function1 被简单定义了 2 次。
On Wikipedia you can see that

...external functions and variables which are resolved in a caller at compile-time and copied into a target application...



您可能不会对这段代码会产生您在问题中看到的类似错误感到惊讶:

prog1.f90
some code here... 

function funtion1(x) ...
...first version of function1 ...
end function

function funtion1(x) ...
...second version of function1 ...
end function

some code here...

一种可能性是至少将 lib1 编译为共享库,并确保(取决于编译器/平台)来自 lib2 的符号不会从共享 lib1 中导出。

关于linker - 链接具有相互依赖关系的静态 fortran 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21634320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com