2015-10-16 58 views
1

這是關於C++程序分發的一個非常基本的問題。假設我有以下程序C++分佈程序依賴關係

#include "v8.h" 
#include <SDL.h> 


int main (int argc, char** argv) 
{ 
    // [AWSOME STUFF!] 
    return 0; 
} 

這取決於谷歌的V8和SDL2。在我的Mac,我已經安裝了這兩個庫,我能成功編譯這樣的程序:

clang++ -std=c++11 -I/usr/local/include -I/Library/Frameworks/SDL2.framework/Headers myprogram.cpp 

要鏈接庫,我可以這樣做:

clang++ -F/Library/Frameworks -framework SDL2 -lv8 myprogram.o -o program 

如果我正確理解它,它在我的電腦上工作,因爲這些庫是動態鏈接的。如果我想將它分發給可能沒有安裝它們的其他人?我如何靜態編譯它們以便在二進制文件中包含下劃線?或者我如何動態鏈接它們,但是使用軟件分發庫?

+2

你似乎沒有鏈接到圖書館。你只有包含。你在哪裏打電話給圖書館的功能? –

回答

1

-L用於指定庫路徑

-l用於指定庫名

如果靜態庫可用於外部元件(谷歌的V8和SDL2),然後鏈接到將它們嵌入在可執行文件中。然後只分發可執行文件就足夠了。

如果使用共享/動態庫進行鏈接,則必須包含共享/動態庫以及分發包。

注意:分發共享/動態庫時,請注意其他依賴項及其版本。

+0

我加了一個問題,我用它來實際鏈接一旦編譯的程序:clang ++ -F/Library/Frameworks -framework SDL2 -lv8 myprogram.o -o program – pistacchio