c++ - 尝试使用 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++ 来编译或如何导致链接问题。这一切都在我之上,我已经花了几个小时试图解决这个问题,所以我在这里,问这个问题,作为我最后的手段。
如果您需要我可以发布每个文件的内容,或者您可以从我上面链接的网站自己下载。
谢谢
解决方案
我能够通过添加extern "C" {#include "ranlib.h"}
到文件#include "ranlib.h"
中来构建项目ne_headers.h
推荐阅读
- android - 有没有办法防止 Activity 在后台被从内存中删除?
- cupy - 向前填充cupy / cudf
- amazon-web-services - Redshift 数据 API:以编程方式为 getStatementResult 设置 MaxResults
- unity3d - unity Editor Drawer 属性对齐
- java - 二叉树中序java
- python - Connexion 视图函数抛出 500 错误而不是捕获异常
- html - 我无法在 html 上链接图像
- python-3.x - 如何通过python中的pynput跟踪和模拟箭头键
- linux - 我的 rPi LAMP 盒子上的 Apache 无缘无故停止工作
- hadoop - 使用 derby 初始化时出现 Hive 异常