- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用计算给定数字的斐波那契数列的示例项目来学习 CMake。我的项目最初包含一个“.c”文件和标题。我能够使用 CMake 构建并毫无问题地运行。现在我正在尝试学习如何通过将我的 fibnoacci 函数移动到一个单独的“.c”文件中来链接库,我使用 CMake 将该文件编译成一个可链接的库。它可以毫无问题地构建,但在我运行它时会抛出段错误。我的项目结构是:
fib
|
*---MathFunctions
| |
| *----CMakeLists.txt
| |
| *----myfib.h
|
*---CMakeLists.txt
|
*---fib.c
|
*---fib.h
|
*---myfib.c
|
*---Config.in.h
MathFunctions文件夹下的CMakeLists.txt是空的。所有的程序逻辑都在 fib.c 和 myfib.c 中。所有构建都在顶部 CMakeLists.txt
纤维.c:
# include "stdio.h"
# include "stdlib.h"
# include "Config.h"
#include "myfib.h"
void internalfib(int num)
{
printf("Internally defined fib\n");
int a, b;
a = 0;
b = 1;
printf( "custom fib of %d", b );
for( int i = 0; i + a <= num; b = i ) {
i = a + b;
a = b;
printf( ", %d", i );
}
}
int main( int argc, char** argv) {
fprintf(stdout,"%s Version %d.%d\n",
argv[0],
VERSION_MAJOR,
VERSION_MINOR);
#ifdef SHOW_OWNER
fprintf(stdout, "Project Owner: %s\n", OWNER);
#endif
myfib(atof( argv[1] ));
printf("\n");
return EXIT_SUCCESS;
}
myfib.c:
# include "stdio.h"
# include "stdlib.h"
void myfib(int num)
{
printf("custom myfib");
int a, b;
a = 0;
b = 1;
printf( "custom fib of %d", b );
for( int i = 0; i + a <= num; b = i ) {
i = a + b;
a = b;
printf( ", %d", i );
}
}
CMakeLists.txt:
#Specify the version being used aswell as the language
cmake_minimum_required(VERSION 2.6)
#Name your project here
project(fibonacci)
enable_testing()
set (VERSION_MAJOR 1)
set (VERSION_MINOR 0)
configure_file (
"${PROJECT_SOURCE_DIR}/Config.h.in"
"${PROJECT_BINARY_DIR}/Config.h"
)
option (SHOW_OWNER "Show the name of the project owner" ON)
#Sends the -std=c99 flag to the gcc compiler
add_definitions(-std=c99)
include_directories("${PROJECT_BINARY_DIR}")
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions)
add_library(MathFunctions myfib.c)
#This tells CMake to fib.c and name it fibonacci
add_executable(fibonacci fib.c)
target_link_libraries (fibonacci MathFunctions)
#test that fibonacci runs
add_test (FibonacciRuns fibonacci 5)
#Test the fibonacci of 5
add_test (FibonacciCompare5 fibonacci 5)
set_tests_properties (FibonacciCompare5 PROPERTIES PASS_REGULAR_EXPRESSION "1, 1, 2, 3, 5")
install (TARGETS fibonacci DESTINATION ${PROJECT_BINARY_DIR}/bin)
从构建文件夹运行“..cmake”和“make”后,我运行:
~/dev/cworkshop/fib/build$ ./fibonacci
./fibonacci Version 1.0
Project Owner: Clifton C. Craig
Segmentation fault: 11
我哪里错了?
最佳答案
您真的确定是因为您的构建系统导致了段错误吗?
您的代码需要输入,而您没有检查是否提供了输入。来自 fib.c:26
:
myfib(atof( argv[1] ));
如果没有给出参数,您的代码将尝试读取您未提供的数据(和段错误)。如果您运行代码:./fibonacci 3
, 你会打印 myfib
.我猜这就是你的问题所在。
其他需要考虑的事情:
Config.h.in
(这是让你的例子编译所必需的),没有提供。 myfib.c
和 myfib.h
在不同的文件夹中。如果myfib.c
是 MathFunctions
的一部分库,我会将源代码放入该子目录中。我认为您正在关注的教程中对此进行了解释:this one , 它有一个 CMakeLists.txt
包含行的文件:
add_library(MathFunctions mysqrt.cxx)
在MathFunctions
图书馆。
正如@n.m 在评论中指出的那样,atof
需要 float
作为输入 - 斐波那契数列是使用 int
生成的(所以 atoi
更合适)。
对于你的例子,我不会使用 add_definitions
设置编译器标志。更好的方法(在项目范围内)是使用 set ( CMAKE_CXX_FLAGS "-O0 -g -Wall")
. (有很多 useful CMake Variables )。同时 add_definitions
工作,它不是你正在做的工作的最佳工具。 :)
关于CMake Noob 段错误问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341650/
在我的真实代码中,我有一个对象池,它创建了我完全忘记的“Foo”。问题是我从来没有首先创建“酒吧”!直到你们中的一些人在执行“IExample Bar”的示例中提到我的错误时,我才意识到这一点。谢谢你
我之前曾使用此网站来帮助我完成许多编程作业,但我找不到与我现在遇到的问题类似的任何内容。 我尝试首先使用方法 printHobby 打印 person 类的 toString 中的 myHobbies
这个问题已经有答案了: Creating an array of objects in Java (9 个回答) 已关闭 8 年前。 我收到 NullPointerException 错误,但无法找出
我正在尝试使用 F# 并尝试将单词列表的映射缩减为一个单词,计数。 这是我目前所拥有的, let data1 = ["Hello"; "Hello"; "How"; "How"; "how"; "ar
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在启动 Addy Osmani 的 amazing book on javascript design patterns但似乎无法起步。谁能告诉我我的方法有什么问题(我使用 Raphael,只是为
我是一个 jQuery 新手,我正在尝试让这个列表按照我希望的方式工作......一个 li 一次被选中,其他的被选中隐。它的工作原理是 ul 展开以显示 li(s) 但随后 不允许您选择不同的 li
这个问题在这里已经有了答案: Vertically align text next to an image? (26 个答案) 关闭 5 年前。
我无法弄清楚调用的参数!这些是我的原型(prototype): void printIdInfo(ofstream &, string , string , const string, string,
这个问题在这里已经有了答案: multiple files upload using same input name in django (4 个答案) 关闭 10 年前。 我有以下名为 reque
我正在尝试使用计算给定数字的斐波那契数列的示例项目来学习 CMake。我的项目最初包含一个“.c”文件和标题。我能够使用 CMake 构建并毫无问题地运行。现在我正在尝试学习如何通过将我的 fibno
我的 Customer 类中有一个名为 save_from_row() 的方法。它看起来像这样: @classmethod def save_from_row(row): c = Custom
我正在编写一个简单的小脚本,以便在 Ultra 音乐节早鸟票开始销售时向我发送短信,以便我抢购。当我开始写这篇文章时,我认为 python 将是实现我目标的快速方法。我所做的是收集链接,然后计算它们并
这个问题在这里已经有了答案: 关闭 12 年前。
我有以下 C++ 类: class Eamorr { public: redispp::Connection conn; Eamorr(string& home, st
首先,我不知道该如何真正向大家展示我在做什么,也没人能真正访问该网站,因为它是网站所在的专用网络。这是JMeter的屏幕截图: 我只是尝试登录到我们的网站,但是在“/common/j_security
我正在尝试使用Javascript在my nav bar中加载更多链接。 这是我尝试过的;我只希望导航中的一个链接在其下方加载更多内容。 collections function show() {
我已经在我的 NOOBS 操作系统上安装了 v4l2loopback,但它不起作用。 我已经检查过是否安装了 v4l2loopback,它是。但是当我输入 sudo modprobe v4l2loop
我目前正在尝试创建一个可以扫描字符串的代码,将找到的每个字母的位置放在与该字母相关联的列表中(例如:如果您将S作为字符串的35、48和120字母,它将将35、48和120放在字母S的列表中)。然后,它
抱歉,我确信这是一个相当简单的 JavaScript 问题,但是每次将成本输入到表中时,如何获得以下总计函数来计算总计,即无需按总计按钮来提交表格。 function totalIt() { va
我是一名优秀的程序员,十分优秀!