这是一个关于 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
如果我理解正确,它可以在我的电脑上运行,因为库是动态链接的。如果我想将它分发给可能没有安装它们的其他人怎么办?我如何静态编译它们以将 hem 包含在二进制文件中?或者我如何动态链接它们,但将库与软件一起分发?
最佳答案
-L
用于指定库路径
-l
用于指定库名
如果静态库可用于外部组件(Google 的 V8 和 SDL2),则链接到它会将它们嵌入到可执行文件中。然后仅分发可执行文件就足够了。
如果共享/动态库用于链接,您必须将共享/动态库与分发包一起包括在内。
注意:分发共享/动态库时,请注意任何其他依赖项及其版本。
关于C++ 分发具有依赖关系的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33163662/