使用Linux g ++编译带有其他库的c ++程序

时间:2014-03-04 22:52:56

标签: c++ linux gcc g++

我使用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前缀指定包含头文件的include目录,而-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的等价物。

1 个答案:

答案 0 :(得分:1)

当一个系统中的#include "something.h"包含您在代码中依赖的标头时,会发生这种情况,当您移动到另一个目标系统时,“something.h”不包含该特定标头(Windows源码也有一个非常烦人的习惯,包括“stdafx.h”,后者又包含一些你没想过的头文件)。

解决方案是包含头文件,该文件提供源文件中所需的功能。假设标题正确使用包含保护,如果您多次包含相同的文件,则不会发生任何不良情况。即使是相当复杂的头文件也很快就会出现(我在这里做了一个问题的实验,显示当你“不必要地”在30个源文件中包含一个相当大的头文件时,它会在几秒钟的编译中加入毫秒 - 现代编译器甚至缓存头文件,所以如果你包含两次相同的文件,它就会知道它是一个并且知道它是否包含包含防护,是否需要再次接收它,甚至不读取文件)。