C++ 分发具有依赖关系的程序

标签 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

如果我理解正确,它可以在我的电脑上运行,因为库是动态链接的。如果我想将它分发给可能没有安装它们的其他人怎么办?我如何静态编译它们以将 hem 包含在二进制文件中?或者我如何动态链接它们,但将库与软件一起分发?

最佳答案

-L用于指定库路径

-l用于指定库名

如果静态库可用于外部组件(Google 的 V8 和 SDL2),则链接到它会将它们嵌入到可执行文件中。然后仅分发可执行文件就足够了。

如果共享/动态库用于链接,您必须将共享/动态库与分发包一起包括在内。

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

关于C++ 分发具有依赖关系的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33163662/

相关文章:

maven - 将 Maven 依赖项添加到 Eclipse RCP 插件的最佳实践

c++ - QML 访问不可调用函数

c++ - QT 5 connect() 函数连接文本编辑器和主窗口

c++ - 不同平台/系统中限定符大小的变化

python - 在 Mac OS X 64 位上编译 S-Transform python 包装器

c# - 在持续集成中优化编译时间

visual-studio - TFS2010 - 并行构建 - 单一解决方案,单一构建代理

android - pub get failed : Because flutter_app depends on firebase_firestore ^0. 12.7+1 which doesn't match any versions, version solving failed

docker - docker :删除其他 docker 镜像上的文件/镜像依赖性

c++ - 存储一个函数c++,稍后调用