链接libMathEval的问题
Linking issues with libMathEval
我有一个大的源代码,我想分成一些模块(.h和.c文件)…因为我有一个独特的2000行源代码文件…
让我们进入问题:
-我在代码中使用了表达式库libMathEval…
-I用以下命令编译大的源代码文件:
gcc -DMAX_ESTRELLAS_SELECCIONADAS=1000000 crowd_2cond.c -lmatheval -o run2sec
-运行我使用:
./run2sec ./fparameters.txt
-控制台的结果是:
Tiempo para lectura de ficheros, calculo de expresiones, creacion de estructuras (listas, IndiceAVL y IndiceVector) y liberacion de IndiceAVL: 3.7689 segundos
Tiempo para algoritmo: **68.7716 segundos**
Tiempo para escritura de ficheros y liberacion de memoria: 3.9501 segundos
Tiempo SECUENCIAL total (avl-serializado 2-index 2-cond Optimizado): 76.4906 segundos
程序产生一个正确的文件输出…
但是我想把那个大的源文件放在不同的模块中…所以我从大文件的一个函数开始,现在我有两个文件(三个带头文件):
crowd_2condc(包含主函数和所有函数,减去移动到下一个文件entrada.c的函数)
entrada.c (header entrada.h):只包含一个大函数…
为了生成可执行文件,我使用以下命令:gcc -c entrada.c
gcc -c -DMAX_ESTRELLAS_SELECCIONADAS=1000000 crowd_2cond.c
gcc -o run2sec crowd_2cond.o -lmatheval entrada.o
再次运行,我使用:
./run2sec ./fparameters.txt
结果显示:
Tiempo para lectura de ficheros, calculo de expresiones, creacion de estructuras (listas, IndiceAVL y IndiceVector) y liberacion de IndiceAVL: 3.7941 segundos
Tiempo para algoritmo: **1.4577 segundos**
Tiempo para escritura de ficheros y liberacion de memoria: 3.6116 segundos
Tiempo SECUENCIAL total (avl-serializado 2-index 2-cond Optimizado): 8.8634 segundos
程序产生的文件输出在这种情况下是不正确的…
两次执行之间的代码差异只是entrada.c中函数的分离,我没有触及更多的东西…
希望有人能帮助我提前感谢你的一切曼纽尔。
您对初始化的建议使我发现了错误。
问题是你说的初始化不好。
#ifndef ENTRADA_H
#define ENTRADA_H
#include <stdlib.h> ---This was not in the entrada.h file---
#include <stdio.h>
#include <string.h>
#include "tipos.h"
ParametrosEjecucion leerParametrosEntrada(int nparam, char *argv[], int num_lineas);
#endif
在"leerParametrosEntrada"中,我使用atof从字符串转换为浮点数,如果不包含stdlib.h文件,似乎该函数的行为会很糟糕。
包含后一切正常…
Thanks Employed Russian
此链接行:
gcc -o run2sec crowd_2cond.o -lmatheval entrada.o
不等于。要使它们完全相等,可以这样做:
gcc -o run2sec crowd_2cond.o entrada.o -lmatheval
链接行对象和库的顺序无关。
我不确定这是否能解决你的问题,但我能看出这是一个立竿见影的变化。
如果问题仍然存在,则可能是您在计算中使用了一些未初始化的值,并且您从原始编译中偶然获得的值产生了正确的答案。在valgrind下运行程序,确保没有使用未初始化的值。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 链接libMathEval的问题