簡體   English   中英

使用Linux g ++使用其他庫編譯c ++程序

[英]Compiling c++ program with additional libraries using Linux g++

我使用Visual Studio 2010創建了一個程序,該程序無錯誤。 但是,當我嘗試使用g ++編譯器在Linux上運行它時,我遇到了一些有關未知功能的錯誤,這應該是已知的。

我有以下文件:

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檢查了是否已安裝標頭,它向我返回了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的等價物。

當一個系統中的#include "something.h"包含您在代碼中依賴的標頭,並且當您移至另一個目標系統時,“ something.h”不包含該特定標頭( Windows源代碼也有一個非常令人討厭的習慣,包括“ stdafx.h”,后者又包含了一些您沒有想到的頭文件)。

解決方案是在源文件中包含提供所需功能的頭文件。 假設標頭正確使用了包含保護,那么如果您再添加幾次相同的文件,則不會發生任何不好的情況。 甚至相當復雜的頭文件也幾乎不需要時間(我在這里做了一個實驗,結果表明,當您“不必要地”在30個源文件中包含相當大的頭文件時,它使編譯幾秒鍾增加了幾毫秒。編譯器甚至會緩存頭文件,因此,如果您兩次包含相同的頭文件,它就會知道已經看到了頭文件,並且知道它是否包含包含保護,以及是否需要再次接收它(甚至不讀取文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM