首页 > 解决方案 > 尝试使用 CLion 使用 .C 和 .CPP 文件构建项目时出现未定义的引用错误

问题描述

我正在尝试编译蒙特卡洛模拟器程序(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++ 来编译或如何导致链接问题。这一切都在我之上,我已经花了几个小时试图解决这个问题,所以我在这里,问这个问题,作为我最后的手段。

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

谢谢

标签: c++clinker-errorsclionundefined-reference

解决方案


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


推荐阅读