2015-10-16 59 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