gpt4 book ai didi

c - 无法在 macOS 中链接动态库

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:29 26 4
gpt4 key购买 nike

我正在尝试使用名为 quirc 的 C 库在我的 C 项目中。到目前为止,我已经通过修改使用 Linux .so 文件的 Makefile 生成了一个 libquirc.dylib.1.0

quirc/helloquirc.c

#include <quirc.h>
#include <stdio.h>


int main() {

struct quirc *qr;

qr = quirc_new();

if (!qr) {
printf("Failed to allocate memory");
}

quirc_destroy(qr);

return 0;
}

我已经在存储库的根目录下创建了上述源文件。我正在使用以下命令对其进行编译:

gcc helloquirc.c -lquirc -L. -Ilib -o helloquirc

根据我的理解,-l 标志指定动态库的名称,-L 标志指定动态库的位置,-I 标志指定头文件的位置,-o 指定可执行文件的名称。

当我运行此命令时,出现以下错误:

ld: library not found for -lquirc
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我使用这一行更改了 Makefile

.PHONY: libquirc.dylib
libquirc.dylib: libquirc.$(LIB_VERSION).dylib

libquirc.$(LIB_VERSION).dylib: $(LIB_OBJ)
$(CC) -shared -dynamiclib -o $@ $(LIB_OBJ) $(LDFLAGS) -lm

并将 .so.$(LIB_VERSION) 的其他实例更改为 .$(LIB_VERSION).dylib

最佳答案

quirc 的构建方式有问题。正确的库名称应该类似于 libquirc.1.0.dylib,带有一个名为 libquirc.dylib 的符号链接(symbolic link)。

看起来 quirc 有一个手写的 makefile,而不是使用像 gyp 或 cmake 这样合理的东西。只要您不尝试在多个平台上构建共享库,手写的 makefile 就可以了。

但是,如果您只是自己编译,那么如果您只使用静态库,您可能会发现事情会更简单。如果您不与任何人共享共享库(如果没有其他程序正在使用 libquirc相同副本),那么拥有共享库就毫无意义。

关于c - 无法在 macOS 中链接动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43839041/

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