尝试使用CLion使用.C和.CPP文件构建项目时出现未定义的参考错误

时间:2018-08-16 14:02:33

标签: c++ c linker-errors clion undefined-reference

我正在尝试编译MonteCarlo Simulator程序(https://www.stat.washington.edu/thompson/Genepi/Mcleeps.shtml)。

这是我尝试构建项目时遇到的错误:

CMakeFiles\MonteCarlo.dir/objects.a(ne_classes.cpp.obj): In function `main':
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:90: undefined reference > to `setall(long, long)'
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:182: undefined reference > to `setall(long, long)'
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:312: undefined 
reference to `getsd(long*, long*)'
CMakeFiles\MonteCarlo.dir/objects.a(ne_classes.cpp.obj): In function 
`Z21draw_folded_asin_normddiiiPid':
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:1230: undefined 
reference to `gennor(float, float)'
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:1236: undefined 
reference to `ranf()'
CMakeFiles\MonteCarlo.dir/objects.a(ne_classes.cpp.obj): In function 
`Z10RealizeNewP10LatentInfoP8GeneInfoP7LogProbi':
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:1990: undefined 
reference to `gennor(float, float)'
CMakeFiles\MonteCarlo.dir/objects.a(ne_classes.cpp.obj): In function 
`Z7uniformii':
C:/Users/Michael/CLionProjects/MonteCarlo/ne_classes.cpp:2111: undefined 
reference to `ignuin(long, long)'
CMakeFiles\MonteCarlo.dir/objects.a(ranlib.c.obj): In function `setgmn':
C:/Users/Michael/CLionProjects/MonteCarlo/ranlib.c:1468: undefined reference 
to `spofa'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [MonteCarlo.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles/MonteCarlo.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles/MonteCarlo.dir/rule] Error 2

这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.12)
project(MonteCarlo)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_executable(MonteCarlo ne_classes.cpp com.c ranlib.c linpack.c 
ne_headers.h ranlib.h)

ne_classes.cpp包含主要功能

尝试搜索此问题后,我发现这可能是由于我使用了不同版本的g ++来编译程序。这也与.c和.cpp文件之间的链接问题有关。但是,我仍然不知道如何使用不同版本的g ++进行编译或如何导致链接问题。一切都在我之上,我已经花了数小时试图解决这个问题,所以我在这里问这个问题,作为我的最后选择。

如果您需要我可以发布每个文件的内容,也可以从上面链接的网站上自己下载它们。

谢谢

1 个答案:

答案 0 :(得分:0)

我能够通过将extern "C" {#include "ranlib.h"}添加到#include "ranlib.h"文件中的ne_headers.h来构建项目