hal*_*rlu 5 linker dependencies fortran static-libraries
我正在开发Fortran程序prog1和两个Fortran库,lib1以及lib2.prog1取决于lib1和lib2,lib1也取决于lib2.目录结构可能如下所示:
prog1
|- lib2
|- lib1
|- lib2
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我想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
Run Code Online (Sandbox Code Playgroud)
换句话说,链接器很困惑,因为两个库包含相同的目标文件lib2_module.o,但具有不同的版本.
所以我的问题是:两个Fortran库如何包含(并使用)相同目标文件的不同版本?
我认为不可能通过使用静态库来做到这一点。这是因为从 prog1 的角度来看,lib2 模块中的 function1 被简单定义了两次。 在维基百科上你可以看到
...外部函数和变量在编译时在调用者中解析并复制到目标应用程序中...
您可能不会惊讶于这段代码会生成您在问题中看到的类似错误:
程序1.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...
Run Code Online (Sandbox Code Playgroud)
一种可能性是至少将 lib1 编译为共享库,并确保(依赖于编译器/平台)lib2 中的符号不会从共享 lib1 中导出。
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |