jjzjj

c++ - main 之外的段错误

我正在处理一个大型的混合C++/Fortran项目。目前,可执行文件在启动时立即出现段错误,在到达main之前,AFAICT。事实上在加载共享库之前。一些输出:$./myprogSegmentationfault(coredumped)$gdb./myprogcoreGNUgdb(Ubuntu7.7-0ubuntu3)7.7Copyright(C)2014FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisfreesoftware:youarefreetochangeandredistributeit.

c++ - 使用和不使用 fopenmp 标志编译 C++ 代码

我已经安装了C++和Fortran编译器并测试了(C++)程序(串行和并行版本)。在没有启用-openmp选项的情况下编译(并行化)代码时,在Fortran中应该以(默认)串行模式编译代码但在C++中我得到类似的错误对omp_get_thread_num的undefinedreference但是在Fortran中,当您编译没有-fopenmp标志的代码时,它会忽略任何以$!omp开头的代码,例如$!ompid=omp_get_thread_num()C++中有类似的选项吗? 最佳答案 您可以使用_OPENMP定义来保护您的C/C++

c++ - 在 C++/FORTRAN 互操作中处理字符串的官方方法是什么

我想了解C++/FORTRAN互操作性的最新改进,尤其是在涉及字符串时。以下是我未成功的尝试,请大家帮我指正或提出更好的解决方案。我的编译器是gcc4.8.5在C++中#includeextern"C"{voidSayHello(char*);}intmain(intargc,char**argv){char*name=argv[1];SayHello(name);return0;}用Fortran语言moduleMyModulecontainssubroutineSayHello(people)bind(c,name="SayHello")use,intrinsic::iso_c_b

c++ - 从 C++ 链接到 Fortran 库 (Lapack)

我正在使用Lapack在我的C++代码中。我很困惑如何正确链接到图书馆。这是一个小例子,对应于我从Lapack调用函数的代码:#includenamespacelapack{extern"C"{voidilaver(int*major,int*minor,int*patch);}}intmain(){intmajor=0;intminor=0;intpatch=0;lapack::ilaver(&major,&minor,&patch);std::cout如果我尝试使用GCC4.8.5(LinuxopenSUSE)编译它,我会收到以下错误:>g++ilaver.cpp-oilaver-

c++ - 支持三元 NURBS 的 NURBS 库

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭去年。Improvethisquestion有谁知道一个免费的(如免费啤酒)C、C++甚至FORTRAN库,它不仅支持NURBS曲线和曲面,还支持体积(即三变量NURBS)?我知道opennurbs,但据我所知它不支持NURBS体积(请随时纠正我,因为我对该库的经验有限)。

c++ - 修正贝塞尔函数的精确计算 - 在 CUDA 中使用 netlib Fortran 例程?

我正在处理在CUDA中准确计算零阶I0的修正贝塞尔函数的问题。很长一段时间以来,我一直根据论文使用有理切比雪夫近似J.M.布莱尔,“修正贝塞尔函数I_0(x)和I_1(x)的有理切比雪夫近似”,数学。计算机,卷。28,名词。126,第581-583页,1974年4月。与Matlab提供的结果相比,给出了1e-29数量级的平均误差。不幸的是,对于我正在处理的新应用程序来说,这种看似很高的准确性已经不够用了。Matlab使用由D.E.开发的Fortran例程。阿摩司Amos,D.E.,“复杂参数和非负阶贝塞尔函数的子程序包”,桑迪亚国家实验室报告,SAND85-1018,1985年5月。A

c++ - 使用 C++ 代码从 FORTRAN DLL 调用函数

我想在C++代码中加载一个fortrandll,并在fortrandll中调用一个函数。代码如下SUBROUTINESUB1()PRINT*,'Iamafunction'END创建foo.dll[fotrandll]后,这是我在visualstudio2012中编写的用于加载fortrandll的以下C++代码。并在fortran代码中调用函数SUB1#include#include#includeusingnamespacestd;extern"C"voidSUB1();typedefvoid(WINAPI*PGNSI)(LPSYSTEM_INFO);intmain(void){Lo

c++ - 在 Rcpp 中包装一个 Fortran 函数

这最初在我看来是一项简单的任务,但我无法完成以下工作。我试图将一个fortran子例程包装到一个Rcpp调用中,以便在R中使用该函数。目标是将该函数合并到一个包中,因此仅在特定*.so文件上使用dyn.load()的想法是不可行的(除非有人可以告诉我怎么做?)。通过阅读类似的帖子,我怀疑在makevars文件中指定标志可能会解决问题,但提供的信息非常简洁here并真诚地感谢一些澄清。我已尽可能接近文档完成以下操作。使用Rcpp.package.skeleton创建包结构将我的fortran文件(hello.f)放在src目录中为Rcpp包装器(hello.cpp)创建了一个基本的cpp

c++ - Instruments Call Tree 破坏了 R、C++ 和 Fortran 的混合

我正在尝试针对CPU时间分析OpenMx的一个函数,一个包含C++和Fortran代码的R包。我的操作系统是OSX10.10。我读过section关于R手册中的这个主题。本款和thispost带我试试Instruments。这是我做的打开的工具选择时间分析器模板按下记录使用RStudio启动我的R脚本我得到以下输出:.命令行工具sample返回相同的输出。问题是它看起来像omxunsafedgemm_会直接从主线程调用。但是,这是一个低级Fortran函数。它总是由名为omxDGEMM的C++函数调用。在此示例中,omxDGEMM首先由omxCallRamExpection调用(因此几

c++ - Fortran Do 循环的上限

在下面的代码中,DO循环的上限在循环内被修改为integer::i1,i2,n1,n2n1=4;n2=1doi1=1,n1doi2=1,n2print*,"i1=",i1,"i2=",i2n1=2n2=2enddoenddo其中gfortran4.8和ifort14.0给出以下结果:i1=1i2=1i1=2i2=1i1=2i2=2i1=3i2=1i1=3i2=2i1=4i2=1i1=4i2=2这表明在每个DO循环进入时边界是固定的(即,尽管n1在循环内被修改为2,但i1的上限固定为4)。这种行为与C/C++的行为形成对比,其中相应的代码intn1=4,n2=1;for(inti1=1;