加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我如何以编程方式确定我的C运行时库的位置?

发布时间:2020-12-16 10:03:41 所属栏目:百科 来源:网络整理
导读:我使用“hax”在CentOS 6上使用GCC 4.8构建C 11,然后在任意CentOS 6目标上进行部署(任何C开箱即用的C-C和GCC 4.3)( ref). 为了使这个工作,我将运送我的所有第三方库以及g运行时,并且运行我的可执行文件,以便确保在适当的位置找到新的库.对于运行时,根据我的
我使用“hax”在CentOS 6上使用GCC 4.8构建C 11,然后在任意CentOS 6目标上进行部署(任何C开箱即用的C-C和GCC 4.3)( ref).

为了使这个工作,我将运送我的所有第三方库以及g运行时,并且运行我的可执行文件,以便确保在适当的位置找到新的库.对于运行时,根据我的计算,我需要发送libstdc和libgcc_s.但我需要知道它们在我的构建系统中的位置,以便我可以打包它们.

有没有一些简洁的方法,我可以从我的包装脚本中查询他们的位置?

(如果最好的方法太笨拙我只会静态地链接它们,但我想避免这种情况,因为我的项目包括几个可执行文件.如果我要静态链接所有我认为我冒风险GPL-ing我的整个项目,例如通过我的C MySQL包装器lib静态链接MySQL C API.我想,可以做两者的混合,虽然some sources warn against this …)

对于奖励积分,我是否需要在libssl,libcrypto,libm,libpthread,libc,librt,libz和ld-linux-x86-64中添加任何内容?

解决方法

如果我理解正确,您已经构建了二进制文件,并且只想获取运行时库列表以将它们与二进制文件打包在一起?您可以尝试使用ldd,例如:

> ldd /usr/bin/ls
    linux-vdso.so.1 (0x00007ffe76dd2000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fc97131f000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007fc97111a000)
    libacl.so.1 => /lib64/libacl.so.1 (0x00007fc970f10000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fc970b68000)
    libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007fc970902000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fc9706fd000)
    /lib64/ld-linux-x86-64.so.2 (0x000055c4ba4ed000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007fc9704f8000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc9702db000)

通过这种方式,您将看到所需的所有库,当然,除了通过dlopen()使用的库之外.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读