gpt4 book ai didi

gcc - nm 符号输出 t vs T 在共享 so 库中

转载 作者:行者123 更新时间:2023-12-03 13:30:45 44 4
gpt4 key购买 nike

我在用户空间熔断器库中添加了一个新函数 (fuse_lowlevel_notify_inval_directory)。
libfuse.so的编译创建完成,没有报错。
但是当我的应用程序尝试使用这个新函数时,链接器抛出错误:未定义对 `fuse_lowlevel_notify_inval_directory' 的引用
collect2: ld 返回 1 个退出状态

当我用 nm 检查时

nm ../libfuse.so | grep inval
00000000000154ed T fuse_invalidate
**000000000001e142 t fuse_lowlevel_notify_inval_directory**
000000000001e26c T fuse_lowlevel_notify_inval_entry
000000000001e1cb T fuse_lowlevel_notify_inval_inode

T/t 表示该符号出现在文本部分。如果大写,则符号是全局的(外部的)。我怀疑是这个问题。新添加的函数显示小写 t,而其他旧函数显示大写 T。知道我可能做错了什么吗?

最佳答案

Any idea about what I might be doing wrong?


t函数确实是库本地的。这可能由于多种原因而发生。最有可能的是:
  • 您声明了函数 static , 或
  • 您使用 -fvisibility=hidden 编译了库并且没有 __attribute__((visibility("default")))在函数上,或
  • 您使用链接器版本脚本(即使用 --version-script=libfoo.version 标志)链接了此库,该脚本隐藏了所有函数(显式导出的函数除外),并且您没有将函数添加到该列表中。
    this使用示例 --version-script限制符号可见性。
  • 关于gcc - nm 符号输出 t vs T 在共享 so 库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531846/

    44 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com