【问题标题】:C - Compile with dependencies includedC - 编译包含依赖项
【发布时间】:2013-04-21 05:55:15
【问题描述】:

我有一些代码要在我没有 root 访问权限的机器上运行。 该机器没有运行此代码所需的一些库。

有什么方法可以在编译时包含所有依赖项?我意识到生成的文件可能非常大。

【问题讨论】:

    标签: c gcc static-linking


    【解决方案1】:

    您正在寻找的是静态编译。执行静态编译会将所有库包含到可执行文件本身中,因此您不必担心特定系统、发行版等上的依赖链。

    你可以这样做:

    gcc -Wl,-Bstatic -llib1 -llib2 file.c
    

    -Wl 将后面的标志传递给链接器,-Bstatic 告诉它尽可能链接静态,然后lib1lib2 是您打算链接的库。

    或者,尝试:

    gcc -static file.c
    

    编译仍然需要匹配非特权系统的架构。并且你需要在编译系统上安装静态库(lib.a

    如果编译正确,运行时应该显示“不是动态可执行文件”:

    ldd a.out
    

    【讨论】:

    • 谢谢。我检查后会确认,但我认为这正是我所追求的!
    • 好的,现在我明白了,这似乎很奇怪 /usr/bin/ld: 找不到 -lgcc_s 我添加的只是你在 -openssl 之后建议的内容
    • 也添加这些标志:-static-libgcc-static-libstdc++(如果使用 c++)
    • -static-libgcc-static-libstdc++ 在使用 -static 时不需要。
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多