简单的程序
main.C
#include <iostream>
void sub3();
int main(void)
{
std::cout << "Hello from C World\n";
sub2();
sub3();
return(0);
}
void sub2(){
std::cout << "Sub1\n";
return;
}
字符串
和sub3.f90
subroutine sub3()
write(*,*) 'Hello from F90 sub3'
return
end
型
使用Ubuntu,
gfortran -c -fno-underscoring sub3.f90
是为了防止名称与附加的下划线混淆
gcc(或g++)main.C -c
使用-lgfortran -lsdtc++的组合与gfortran或gcc链接
找不到将sub 3或sub 3()作为定义引用的组合。
最好是CMake工作,也
CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(ProjName VERSION 0.1.0 LANGUAGES C CXX Fortran)
include(FortranCInterface)
set( CMAKE_CXX_FLAGS "-lgfortran")
set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -lstdc++ -fno-underscoring")
set( CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} )
add_library(ProjFLib sub3.f90 )
add_executable( ProjTest main.C )
target_link_libraries( ProjTest ProjFLib )
型
无论是附加(或抑制)下划线,都不能将组合链接,某些迭代具有对throw_length_ 错误的未定义引用,操作符delete(),.
1条答案
按热度按时间svujldwt1#
一些小的修复和改进,使其工作:
extern "C"
块中来禁用C++名称修改。bind(C)
功能。sub2()
放在main()
之前,否则编译器会抱怨缺少声明(或者写一个原型也可以)。因此,main.cpp:
字符串
sub3.f90:
型
编译并运行:
型