Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译c++;使用Linux g++;_C++_Linux_Gcc_G++ - Fatal编程技术网

C++ 编译c++;使用Linux g++;

C++ 编译c++;使用Linux g++;,c++,linux,gcc,g++,C++,Linux,Gcc,G++,我已经使用VisualStudio2010创建了一个程序,它是无错误的。但是,当我尝试在Linux中使用g++编译器运行它时,我遇到了一些关于未知函数的错误,这应该是已知的 我有以下文件: main.cpp header.h header.cpp (all in the same folder) header2.h (which is in a different folder, /.../header2 各种库,存储在另一个文件夹/…/libs中 为了编译代码,我使用g++编译器,在终

我已经使用VisualStudio2010创建了一个程序,它是无错误的。但是,当我尝试在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库中的函数。我使用 find/usr/include-name 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);

椭圆_fit.cpp与我在示例中提到的header.cpp是等价的。

当一个系统中包含“something.h”时会发生这种情况,其中包含您在代码中依赖的头,当您移动到另一个目标系统时,“something.h”不包含该特定头(Windows源代码还有一个非常恼人的习惯,就是包含“stdafx.h”,而stdafx.h又包含一些您没有想到的HeaderFile)


解决方案是在源文件中包含提供所需功能的头文件。假设头文件正确使用了include-guard,那么如果您多包含几次相同的文件,就不会有什么不好的事情发生。即使是相当复杂的头文件也几乎不需要时间(作为一个问题的结果,我做了一个实验,结果表明,当您“不必要地”编译时,它会在几秒钟内增加毫秒在30个源文件中包含一个相当大的头文件—现代编译器甚至会缓存头文件,因此,如果您将同一个头文件包含两次,它就知道看到了那个头文件,并且知道它是否包含include-guard,以及它是否需要再次接收头文件,甚至不需要读取该文件).

听起来好像您实际上没有在任何地方包括
time.h
——通常情况下,某些系统标题会“拖入其他标题”,在一个系统中,但不是在另一个环境中编译时。这将有助于你们中的许多人生成一个关于所看到内容的最小示例,使用真实路径和真实头文件。编辑了我在原始帖子中得到的实际错误!那么,代码是如何重现的呢?包括
stdlib.h
还是
cstdlib
?我尝试在一个简单的测试用例中重现您的问题,使用了
#include
#include
,两者都没有失败。我没有包括那些库!我现在包括了它们,它成功了。为什么它在没有这些包含的windows中工作,但在linux中却不工作?