【发布时间】:2017-05-08 02:49:12
【问题描述】:
我正在尝试在我的 C 项目中使用名为 quirc 的 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
【问题讨论】:
-
libquirc.dylib.1.0是否与helloquirc.c存在于同一目录中?您是否尝试将-L.标志放在-lquirc标志之前? -
@Evert 对这两个问题都是肯定的