[英]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.