- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我通过 GFortran 编译 Fortran 小程序,并尝试从 MSVC 2013 编译的 C++ 代码(如 this)调用子例程。我在链接上遇到下一个错误:
- error LNK2019: unresolved external symbol _gfortran_st_write referenced in function fortfunc_
- error LNK2019: unresolved external symbol _gfortran_transfer_integer_write referenced in function fortfunc_
- error LNK2019: unresolved external symbol _gfortran_transfer_real_write referenced in function fortfunc_
- error LNK2019: unresolved external symbol _gfortran_st_write_done referenced in function fortfunc_
我将 Fortran 代码构建到静态库 (ar rc .lib .o),并将其链接到 C++ 项目。
你能告诉我错误吗,我如何调用 gfortran 子程序 grom msvc c++ 代码?
我的 C++ 代码:
#include <iostream>
using namespace std;
extern "C" {
void fortfunc_(int *ii, float *ff);
}
int main( int argc, char **argv )
{
int ii=5;
float ff=5.5;
fortfunc_(&ii, &ff);
}
和 Fortran 代码:
subroutine fortfunc(ii,ff)
integer ii
real*4 ff
write(6,100) ii, ff
100 format('ii=',i2,' ff=',f6.3)
return
end
制作:
add_executable(${UNIT} ${_UNIT_SOURCES})
set(FORTRAN_TEST_LIB testlib.lib)
target_link_libraries(${UNIT} ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY}
${FORTRAN_TEST_LIB})
如果我链接 libgfortran 和其他 mingw 库,我得到:
LNK1000 - error during BuildImage
LINK : fatal error LNK1000: Internal error during IMAGE::BuildImage
Version 12.00.40629.0
ExceptionCode = C0000005
ExceptionFlags = 00000000
ExceptionAddress = 00F8980B (00F70000)
"C:\PROGRA~2\MICROS~3.0\VC\bin\X86_AM~1\link.exe"
NumberParameters = 00000002
ExceptionInformation[ 0] = 00000000
ExceptionInformation[ 1] = 00000010
CONTEXT:
Eax = 00000000 Esp = 00E3E1D4
Ebx = 80400000 Ebp = 00E3E1F4
Ecx = C0800000 Esi = 80652AFC
Edx = 80652B20 Edi = 8065291C
Eip = 00F8980B EFlags = 00010202
SegCs = 00000023 SegDs = 0000002B
SegSs = 0000002B SegEs = 0000002B
SegFs = 00000053 SegGs = 0000002B
Dr0 = 00000000 Dr3 = 00000000
Dr1 = 00000000 Dr6 = 00000000
Dr2 = 00000000 Dr7 = 00000000
LINK Pass 1 failed. with 1000
和我的 cmake 文件:
set(UNIT unit_tests)
include_directories(${CMAKE_CURRENT_SOURCE_DIR} src)
file(GLOB_RECURSE _UNIT_SOURCES "src/*.cpp")
file(GLOB_RECURSE _GNU
"D:/Development/COMMON_UTILS/GNU/mingw64/lib/gcc/x86_64-w64-mingw32/6.3.0/*.a")
file(GLOB_RECURSE _TEST_RES "res/*.ini")
add_executable(${UNIT} ${_UNIT_SOURCES})
target_link_libraries(${UNIT} ${GTEST_LIBRARY}
${GTEST_MAIN_LIBRARY} ${_GNU} ${FORTRAN_TEST_LIB})
add_test(test1 ${UNIT})
install (TARGETS ${UNIT} RUNTIME DESTINATION bin)
install(FILES ${_TEST_RES} DESTINATION test_res)
最佳答案
使用 cmake_add_fortran_subdirectory 有助于解决问题。参见 https://blog.kitware.com/fortran-for-cc-developers-made-easier-with-cmake/例如。
关于c++ - MSVC C++ 调用 GFortran 子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531399/
我正在为一个私有(private)项目编译库,这取决于许多库。具体来说,其中一个依赖项是用 Fortran 编译的。在某些情况下,我看到使用 g77 编译的依赖项,在其他人身上,我看到它是用 gfor
根据 this , gfortran 可以进行整数逻辑转换,但我收到此错误: if (.not.bDropped.and.(zz_unif01() .lt. (1
我听说 g95 不再有效。现在使用哪种编译器是合适的(我将不胜感激提供最新的概述) 最佳答案 截至 2010 年 12 月 29 日,该项目似乎已死。自 2010 年 8 月中旬以来,该项目的博客没有
我有一个针对 ifort 进行了优化的程序,但是我想改用 gfortran 编译它。以下是提供的标志: FCFLAGS= -Vaxlib -CB -mcmodel=large -O -openmp
我正在尝试使用 gfortran 编译器在 Ubuntu 14.04 上使用旧的 CPMD-3.11.1 版本。 在运行 Makefile 时我遇到了这个错误: Error: Unclassifiab
我目前有 Xcode(以及命令行工具)和 gfrotran from HPC安装在我的 Yosemite 系统上,并希望将 HPC 的 gfortran 替换为 Homebrew 的(因为我在使用 H
自升级到优胜美地后,我无法使用 gfortran 进行编译。最初我收到“段错误 11”,然后我: 从 http://hpc.sourceforge.net/ 更新到 gcc v.5.0 重新安装了 X
我做了这个小程序来测试,如果gfortran做尾调用消除: program tailrec implicit none print *, tailrecsum(5, 0) contains recur
我使用的是 ubuntu 12.04,gcc/g++ 4.8,gfortran 是 4.6,我重新安装了 gfortran-4.8 和 gfortran-4.8.dev,仍然没有链接。 当我尝试编译一
有没有办法格式化输出的实数,以便宽度和小数部分都未指定?只需执行以下操作,ifort 就可以做到这一点: write (*, '(F)') num ...但我知道这种用法是特定于编译器的扩展。 Gfo
我需要调试一些 pure用 gfortran 编译的程序中的函数。有什么办法可以忽略 pure声明以便我可以使用 write , print等在这些pure功能不费力? 不幸的是,要删除 pure
是否存在与 C“inline”关键字等效的 Fortran 关键字? 如果存在一些特定于编译器的关键字,gfortran 是否有? 最佳答案 一般来说,Fortran 规范为编译器编写者提供了如何实现
请参阅下面的示例 program test character(10),dimension(5):: models = (/"feddes.swp", "jarvis89.swp", "jarvi
有没有办法强制 gfortran 中的下溢清零? 我不敢相信这是第一次有人问这个问题,但我在任何地方都找不到任何相关内容。如果这是重复的,我很抱歉。 最佳答案 您可以使用支持 Fortran 2003
我在将程序链接到库时遇到问题。我以前从未这样做过,所以我可能做了一些愚蠢的事情,但据我所知,我正在做正确的事情。我需要将程序 foo.f90 链接到库 libbar.a,该库位于我的主目录下其他位置的
使用 gfortran 编译时是否可以使用实数作为迭代器和数组索引?这是一些示例代码: program test real i real testarray(5) testar
我需要一点帮助:根据this site ,最大连续行数有限制。 所以我决定对此进行测试。我编写了一个巨大的 FUNCTION ,它计算在分成 17,146 个连续行的语句中表达的巨大代数公式。 !te
考虑以下代码: subroutine tao_show_this () implicit none type b_struct integer, pointer :: good_user => n
我正在尝试使用 mac-ports (OS-X) 中的 Gfortran 4.7 编译以下简单代码: program main implicit none integer :: n = 1, cloc
我用 Fortran90 编写了一个简单的程序来计算三角形的面积。用户输入三角形的三边,然后程序输出面积。足够简单。 MODULE Triangle_Operations IMPLICIT N
我是一名优秀的程序员,十分优秀!