C++ 编译c++;使用Linux g++;
我已经使用VisualStudio2010创建了一个程序,它是无错误的。但是,当我尝试在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++编译器,在终
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中却不工作?