gpt4 book ai didi

找不到-llibc

转载 作者:行者123 更新时间:2023-11-30 14:24:06 27 4
gpt4 key购买 nike

我是一个 C 菜鸟,所以这可能是一个愚蠢的问题。我正在尝试编译 C 对象(.o 文件)的 .so 文件(共享库,如果我的术语正确的话),以便通过 ctypes 将它们导入到 Python 中。我首先编译了 *.so

gcc -shared -o libvARAM.so ARAM.o ARAM_io.o io.o pre.o rule.o stat.o ART.o vARAM.o

这很有效,除了当我尝试通过 ctypes 加载时,我得到了奖励:

OSError: ./libvARAM.so: undefined symbol: max

经过一番挖掘,我意识到 max 不是标准的 C 函数。调用 ldd libvARAM.so 通知我依赖项之一是 libc.so.6。我创建了一个到 libc.so.6 的符号链接(symbolic link) libc.so ,然后尝试将我的 .so 重新编译为

gcc -shared -o libvARAM.so ARAM.o ARAM_io.o io.o pre.o rule.o stat.o ART.o vARAM.o -llibc

生成的

/usr/bin/ld: cannot find -llibc

如果我也尝试 -L/lib/i386-linux-gnu/-llibc,也会生成相同的错误。我知道this线程,但感觉它与我的情况无关,因为解决方案是针对 makefile 的。如果这很重要的话,我正在使用 Xubuntu。

真诚感谢任何帮助!

最佳答案

一:链接器标志不是这样工作的。对于libXYZ.so,相应的链接器标志不是-llibXYZ,而是-lXYZ

二:即使这样也不需要,因为 C 标准库 (-lc) 会自动链接到可执行文件。

三:您的问题很可能是在头文件之一中定义了一个 max() (而不是函数),但是您不包含这个头文件,因此编译器不知道它是一个宏并将其视为一个函数 - 那么它当然无法在 libc.so 中找到它,因为它不在那里。

关于找不到-llibc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229642/

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