簡體   English   中英

C ++如何創建“全局”庫

[英]C++ how to create a 'global' library

我正在開發一個包含以下行的項目: #include <fftw3.h>

現在我可以簡單地下載並制作fftw 但是,我如何使其成為一個“全球”圖書館?

我已經嘗試將其添加到$PKG_CONFIG_PATH但這似乎不起作用。 我經常main.c:30:10: fatal error: 'fftw3.h' file not found這個錯誤: main.c:30:10: fatal error: 'fftw3.h' file not found

所以我的問題是:我需要在哪里制作fftw庫(或任何庫)才能使其全局可訪問?

注意:我可能會錯誤地使用全球一詞,在這種情況下,請讓我知道正確的術語是什么。

更新:命令是:

gcc -Wall -march=native -O3 -ffast-math `pkg-config --cflags fftw3` `pkg-config --cflags sndfile` -c -o main.o main.c

main.c包含該行

#include <fftw3.h>

我不認為你的方式有一個確切的答案 - 沒有“全局”庫,因為“fftw3.h”是一個頭文件。

這里有3件事: 1)你在哪里找到頭文件 2)你在哪里找到靜態(或存根/導入)庫 3)你在哪里找到動態庫(在運行時)

對於1),答案是“取決於構建工具的配置”。 所以是2)。 對於3,它通常是“在路徑中,與可執行文件在同一文件夾中,在當前目錄中,或在特定於平台的目錄中”。 對於Windows,Linux或其他平台,它會略有不同。

簡而言之,您需要為它配置構建工具。

編輯:現在我們知道你的工具是什么,我建議你閱讀這個簡短的頁面,解釋GCC如何查找標題(你的.h文件)。 您可以將頭文件放在其中一個搜索路徑中(草率!,不推薦),或將“額外”頭文件放在您選擇的目錄中,並使用“-I”參數將其添加到編譯命令中。

https://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

beign能夠使用<file>包含文件通常是不好的做法,它增加了同名文件變成ambiguos的風險(特別是在大項目上)。

您可以通過使用-I編譯器選項指定其他全局包含目錄來實現此目的。 然而,沒有最好的方法來實現這一目標(這取決於項目的組織方式和規模如何)。

包括絕對路徑:

#include <file>
#include <somepath/file2>

優點:

  • 源代碼結構更靈活(您可以移動文件而不必擔心破壞編譯)

缺點:

  • 文件之間名稱沖突的可能性更大

包含相對於源文件的路徑:

#include "../file"
#include "../somepath2/file2"

優點:

  • 沒有機會發生名稱沖突,只有1個文件給出任何相對路徑

缺點:

  • 您無法移動文件,否則需要更改相對路徑(但IDE的重構工具可能有助於此)

當然,我更喜歡使用標准庫內容的絕對路徑,最后使用FEW其他依賴項,否則我只使用相對路徑。 您應該注意,當編譯器搜索全局包含文件時,它將搜索所有提供的-I目錄,因此如果您濫用該功能,則可能會增加編譯時間。

當然,即使使用全局包含,我更喜歡只添加一個額外的目錄並組織它,以便編譯器不必猜測路徑

Include
  +FolderNameSpace1
  +FolderNameSpace2

所以我只需在包含時添加命名空間

#include <FolderNameSpace1/File1>

一些開源項目,考慮到這個問題,但是由於並非所有人都願意花太多時間組織文件夾結構,他們的開發人員使用更簡單的策略在Header文件名前加上一個后綴(以避免名稱沖突)。在Ogre的例子中你必須做:

#include <OgreFileName>
//or (depending on how your project is organized)
#include "../Deps/OgreFileName"

所以在一些前提下,回答你的問題

您必須添加“全局包含目錄”包含您要使用的所有包含文件的目錄,因此,鑒於您正在使用GCC,您的項目組織如下:

Project
  +FFWT
    +includes
  +yourfolder
    +yoour files

你要做的就是:

gcc -Wall -march=native -O3 -ffast-math -I../FFWT/includes c -o main.o main.c

(我假設你從“你的文件夾”里面調用GCC)

如何添加其他全局包含目錄:

暫無
暫無

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

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