【发布时间】:2014-03-04 22:52:56
【问题描述】:
我使用 Visual Studio 2010 创建了一个程序,该程序没有错误。但是,当我尝试在 Linux 中使用 g++ 编译器运行它时,我遇到了一些关于未知函数的错误,这应该是已知的。
我有以下文件:
main.cpp
header.h
header.cpp (all in the same folder)
header2.h (which is in a different folder, /.../header2
各种库,存储在另一个文件夹 /.../libs
为了编译代码,我使用 g++ 编译器,在终端中编写以下代码:
g++ main.cpp header.cpp -I/.../header2 -L/.../libs
我读过 -I 前缀指定包含头文件的包含目录,而 -L 前缀指定库目录。
当我编译程序时出现错误,无法识别 time.h 库中的函数。我检查了是否安装了标头,使用 查找 /usr/include -name time.h 它返回了 time.h 标头的位置。我也试过用-lrt编译,但是没有用 g++ main.cpp header.cpp -I/.../header2 -L/.../libs -lrt
我对 linux 很陌生,所以任何帮助都将不胜感激。
谢谢。
编辑: 我得到的实际错误是:
ellipse_fit.cpp: In function ‘void Create_Permutation(int*, int, int)’:
ellipse_fit.cpp:53:29: error: ‘rand’ was not declared in this scope
a[i] = (int)((double)rand()/RAND_MAX*(double)range);
ellipse_fit.cpp:53:31: error: ‘RAND_MAX’ was not declared in this scope
a[i] = (int)((double)rand()/RAND_MAX*(double)range);
ellipse_fit.cpp 相当于我在示例中提到的 header.cpp。
【问题讨论】:
-
听起来您实际上并没有在任何地方包含
time.h- 通常情况下,某些系统标头“拖入其他系统”,在一个系统中,但在您在另一个环境中编译时不会。它会帮助你们中的很多人制作一个您所看到的最小示例,带有真实的路径和真实的头文件。 -
编辑了我在原帖中得到的实际错误!
-
那么,重现这个的代码是什么样的?你包括
stdlib.h或cstdlib吗? -
我尝试在一个简单的测试用例中重现您的问题,使用
#include <cstdlib>和#include <stdlib.h>,均未失败。 -
我没有包括那些库!我现在把它们包括在内,它起作用了。为什么它在没有这些包含的情况下在 windows 中工作,但在 linux 中却不行?