最近发布一款Linux程序在自己开发环境上跑得好的了,程序到客户目标机就提示glibc版本过低。目前了解到可以通过下载新版本的glibc升级客户目标机系统即可,但客户不愿意,希望能发布一款能够静态链接上glibc相关的库文件。求大神指点,或者给个demo参考,谢谢!补充一点:程序需要链接一个其他厂商提供的.so动态库。

解决方案 »

  1.   

    不难吧?把你用到的动态库编译为静态库,加入到你最终的可执行文件就行了。glibc去下载源码,不说了,点到为止~
      

  2.   

    动态库那个是其他厂商提供的,如果真的没其他办法。联系厂家也许可能改个静态库。但是glibc应该是不那么单纯的把源码或把静态库加到工程里编译就能通过吧。我有试过,但是都会莫名提示一些像程序入口没找到之类的。求大神做过的提供一个参考例子呀
      

  3.   

    感觉在客户类似环境下编译更简单一些,或者docker?
    全静态编译不依赖运行环境应该是不可能的吧
      

  4.   


    办法值得一试,或者在自己的环境下,更新与客户同一版本的glibc。
      

  5.   

    办法有很多:
    1: 使用静态库方式
    2: 仍然使用动态库的方式,但是将动态库随着程序包一起发布,并且在编译之后指定动态库加载的路径(-rpath 编译参数)
    3:通过linux的动态库版本控制来做。按照你的意思,这个方案用户不同意。建议使用第二种。
      

  6.   

    这容易 解决,本身gcc就支持半静态方式连接
    不过需要使用makefile文件方式进行
    你可以选择将glibc stdc++库等全部使用-static静态连接,但是第三方提供的 动态库使用动态连接
    建议你使用低版本glibc环境编译连接,例如centos7,这样编译出来的是for GNU Linux 2.6
    放到高版本环境也不会有问题