在win7上用cygwin编译Geant4自带的example提示 error C3861: “lrint”: 找不到标识符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在win7上用cygwin编译Geant4自带的example提示 error C3861: “lrint”: 找不到标识符相关的知识,希望对你有一定的参考价值。

最近几天初接触Geant4(4.9.4.p01),在wind7上装的,装了cygwin和C++2010学习版。今天在make一个Geant4自带的例子时中断了,提示 error C3861: “lrint”: 找不到标识符 ~以下是相关的程序段

numberOfVoxelsAlongX = lrint(detectorSizeX / sizeOfVoxelAlongX);
sizeOfVoxelAlongX = ( detectorSizeX / numberOfVoxelsAlongX );

numberOfVoxelsAlongY = lrint(detectorSizeY / sizeOfVoxelAlongY);
sizeOfVoxelAlongY = ( detectorSizeY / numberOfVoxelsAlongY );

numberOfVoxelsAlongZ = lrint(detectorSizeZ / sizeOfVoxelAlongZ);
sizeOfVoxelAlongZ = ( detectorSizeZ / numberOfVoxelsAlongZ );

求高人指点。。
自问自答吧~lrint函数是C99标准库的数学函数,VC++不兼容C99~解决办法就是换用gcc编译;当然如果你能用别的函数代替lrint函数也可以。。。
问点别的吧~哪位大侠有使用geant4的经验,给小弟传授传授呗~

参考技术A 用cygwin,工具链却是VC,这个用法实在很飘逸……莫非就是利用cygwin里面的make or cmake?

那vc也自带nmake啊……

诡异的模式……
参考技术B 你提的问题太高深了

Geant4采用make和cmake编译运行geant4自带例子的方法

 

该教程介绍如何将geant4中自带的例子通过camke编译成可执行文件,并运行程序。

 

1 在linux主目录下创建一个geant4_workdir目录,并将geant4自带的例子B1复制到该目录下,如图1所示,geant4自带的B1源文件所在目录为geant4安装目录,如图2所示。

图1

图2

2 复制完成后到终端并进入到B1文件里面(~/geant4_workdir/B1/),然后在终端输入make开始编译文件,开始与结果分别如图3所示,这样便完成了编译。

图3

编译之后再回到~/geant4_workdir/目录下,可以看到有bin和temp文件夹,bin文件夹下装的是二进制文件exampleB1,如图4,可以直接运行。

图4

3 现在开始运行exampleB1可执行文件,在终端进入刚才编译的B1文件夹,人后输入命令~/geant4_workdir/bin/Linux-g++/exampleB1,即编译生成的可执行文件的目录,运行结果见图5,并弹出可视化界面,可以在弹出的界面里输入macro文件命令执行程序

图5

上述方法编译的程序有一个缺点就是源程序B1和编译程序B1没分开,下面介绍源程序和编译后的程序分开执行geant4程序的过程:

 

1 同样的,首先将源程序B1复制到~/geant4_workdir目录下,然后建立一个B1-build的文件夹,如图6所示,这个B1-build文件夹就是用来生成可执行文件的。

图6

2 编译生成可执行文件,从终端进入到B1-build文件夹,并在终端输入命令:

cmake –DGeant4_DIR=/home/geant4.10.03-install/lib/Geant4-10.3.2 $HOME/geant4_workdir/B1

等式后面的内容分为两部分,前面是geant4安装目录,这里需要geant4安装的Geant4Congfig.cmake(如图7所示)文件来编译B1文件,因此先输入Geant4Congfig.cmake文件所在目录,后半部分是要编译的B1源文件所在目录,就是刚才复制到~/geant4_workdir目录下的B1文件,输入命令回车后得到图8 结果,这一步将源文件B1复制到了B1-build文件下,并创建了geant4头文件库可待编译源文件的连接,打开B1-build问价夹可以看到与B1源文件相同的文件,如图8所示。

图7

图8

3 现在可以进行编译了,在终端继续输入命令make –j2,2表示电脑系统的内核数,我的系统内核数为2,编译结果后会生成可执行文件exampleB1,如图9所示。

图9

4 现在可以执行exampleB1文件了,在终端输入./exampleB1,回车后会得到和第一种方法一样的结果。

第二种方法将B1源文件和编译生成的可执行文件B1-build分开放在了不同的目录,这样不会将源文件和可执行文件混淆,有许多好处。

 

以上是关于在win7上用cygwin编译Geant4自带的example提示 error C3861: “lrint”: 找不到标识符的主要内容,如果未能解决你的问题,请参考以下文章

在Win7环境下搭建Geant4工作平台

win7下使用cygwin编译VLC

在 windows 系统上用 Emacs 编译 C

CentOS8安装Geant4笔记:Geant4介绍编译和安装

如何在windows上用C语言实现MQTT协议

netbeans c++程序无法运行