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

如何“注册”我的库libfoo.so以将其与`-lfoo`链接?

发布时间:2020-12-15 22:11:12 所属栏目:安全 来源:网络整理
导读:如何“注册”我的库foo.c,编译为libfoo.so,将其与-lfoo链接?是通过将其路径附加到LD_LIBRARY_PATH吗?是通过运行sudo ldconfig吗? 为了好奇,我该向谁“注册”它?也就是说,哪个应用程序“需要知道”-coo对 gcc bar.c -lfoo的工作意味着什么?这是bash环境
>如何“注册”我的库foo.c,编译为libfoo.so,将其与-lfoo链接?是通过将其路径附加到LD_LIBRARY_PATH吗?是通过运行sudo ldconfig吗?
>为了好奇,我该向谁“注册”它?也就是说,哪个应用程序“需要知道”-coo对 gcc bar.c -lfoo的工作意味着什么?这是bash环境吗?是gcc吗?是内核吗?
>对于静态库(例如libfoo.a),这有什么不同吗?

解决方法

如果您的库不在“标准”库目录中(例如/usr/local/lib或/usr/lib),那么当您链接它时,您需要告诉编译器它的位置-L:

$gcc -L/home/username/foo -Wall -o test main.c -lfoo
        |                                        |
        |__ location of libfoo.so or libfoo.a    |__ link libfoo.so or libfoo.a

GCC assumes that all libraries start with ‘lib’ and end with .so or .a
(.so is for shared object or shared libraries,and .a is for archive,
or statically linked libraries).

> -L是搜索链接到可执行文件的库的位置
> -l将库链接到可执行文件(-lfoo可以翻译为“链接库libfoo.so”)

使用共享库时,有时仅仅链接它们是不够的(例如,如果库未安装在标准位置,例如上面显示的示例).这是使用LD_LIBRARY_PATH,rpath或ldcondig发挥作用的地方.静态库路径不需要像共享库一样设置,因为它们是使用可执行文件编译的.

LD_LIBRARY_PATH

$export LD_LIBRARY_PATH=/home/username/foo:$LD_LIBRARY_PATH

导出此变量会通知运行时链接程序查找与可执行文件关联的libfoo.so库的指定位置. LD_LIBRARY_PATH或多或少是设置库位置的临时或便捷方式.

rpath

$gcc -L/home/username/foo -Wl,-rpath=/home/username/foo -Wall -o test main.c -lfoo

rpath与LD_LIBRARY_PATH的工作方式类似(因为库几乎可以驻留在userland中的任何位置),但是,rpath在编译时链接到可执行文件,并设置“固定”库位置.

ldconfig

最终可能最好的解决方案是使用ldconfig,它为标准库位置和您可以指定的最新共享库创建必要的链接和缓存.它确实需要提升权限(例如sudo)以这种方式设置路径,并且应该在一定程度上谨慎使用.

$sudo cp /home/username/foo/libfoo.so /usr/local/lib
$sudo chmod 0755 /usr/local/lib/libfoo.so

这会将库复制到/usr/local/lib中,并将权限设置为每个人都可读.

$sudo ldconfig
$ldconfig -p | grep foo
libfoo.so (libc6) => /usr/local/lib/libfoo.so

然后我们更新加载器缓存,并验证路径是否设置正确.

$gcc -Wall -o test main.c -lfoo

通过使用ldconfig,现在不需要-L选项,LD_LIBRARY_PATH或rpath.

附加信息

?Shared Libraries With GCC on Linux

(编辑:李大同)

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

    推荐文章
      热点阅读