C ++分发带有依赖项的程序

时间:2015-10-16 06:14:46

标签: c++ compilation dependencies shared-libraries clang

这是关于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

如果我理解它,它可以在我的计算机上运行,​​因为库是动态链接的。如果我想将其分发给可能没有安装它们的其他人,该怎么办?如何静态编译它们以使包含在二进制文件中?或者我如何动态链接它们但是用软件分发库?

1 个答案:

答案 0 :(得分:1)

-L用于指定库路径

-l用于指定库名称

如果外部组件(Google的V8和SDL2)可以使用静态库,则链接到它将将它们嵌入可执行文件中。然后只分发可执行文件即可。

如果使用共享/动态库进行链接,则必须包含共享/动态库以及分发包。

注意:在分发共享/动态库时,请注意任何其他依赖项及其版本。