gpt4 book ai didi

c - '未定义对 'function' 的引用

转载 作者:行者123 更新时间:2023-11-30 14:41:04 25 4
gpt4 key购买 nike

我已经下载了库libcomplearn并想在一个小示例程序中测试它。但是当我链接它时,我收到错误“未定义对‘函数’的引用”。

我将库安装到了特定路径。

操作系统:Debian

测试.c

#include <stdio.h>
#include "complearn.h"
#include "complearn/complearn-ncd.h"

int main(const int argc, const char * const argv[])
{
printf("Number from my library\n");

CompLearnNcd *ncd = complearn_ncd_top();
return 0;
}

Makefile

FILES = test
LIBPATH = /try/libcomplearn/lib/pkgconfig
OUTPUT = TK_1
LIBNAME = complearn
#--------------------------------------------------

CC = gcc

CFLAGS = -c -Wall `export PKG_CONFIG_PATH=$(LIBPATH) && pkg-config --cflags $(LIBNAME)`
LDFLAGS = -static `export PKG_CONFIG_PATH=$(LIBPATH) && pkg-config --libs --static $(LIBNAME) -llzma`

all: Release

Debug: CFLAGS += -g
Debug: $(OUTPUT)

Release: $(OUTPUT)

$(OUTPUT): $(OUTPUT).o
@echo "started...."
$(CC) -o $(OUTPUT) $(OUTPUT).o $(LDFLAGS)
@echo "done...."

$(OUTPUT).o: $(FILES).c
$(CC) $(CFLAGS) $(FILES).c -o $(OUTPUT).o

clean:
rm -f $(OUTPUT).o $(OUTPUT)

输出

gcc -c -Wall `export PKG_CONFIG_PATH=/try/libcomplearn/lib/pkgconfig && 
pkg-config --cflags complearn` test.c -o TK_1.o
test.c: In function ‘main’:
test.c:9:19: warning: unused variable ‘ncd’ [-Wunused-variable]
CompLearnNcd *ncd = complearn_ncd_top();
^~~
started....
gcc -o TK_1 TK_1.o -static `export
PKG_CONFIG_PATH=/try/libcomplearn/lib/pkgconfig && pkg-config --libs --
static complearn -llzma`
Unknown option -llzma
/usr/bin/ld: TK_1.o: in function `main':
test.c:(.text+0x1c): undefined reference to `complearn_ncd_top'
collect2: error: ld returned 1 exit status
make: *** [makefile:28: TK_1] Error 1

我也尝试过使用以下命令:

gcc test.c `-L/try/libcomplearn/lib/ -llzma` `pkg-config --cflags --libs glib-2.0` 

最佳答案

你说:

I also tried with the command:

gcc test.c `-L/try/libcomplearn/lib/ -llzma` `pkg-config --cflags --libs glib-2.0`

这表明你不明白back-ticks ,自从:

`-L/try/libcomplearn/lib/ -llzma`

不是对它们的有意义的使用。现在花点时间来学习它们的用途。

您的联动失败的原因是设置:

LDFLAGS = -static `export PKG_CONFIG_PATH=$(LIBPATH) && pkg-config --libs --static $(LIBNAME) -llzma`

在 makefile 中。

这里的反引号扩展中有 -llzma:

`export PKG_CONFIG_PATH=$(LIBPATH) && \
pkg-config --libs --static $(LIBNAME) -llzma`

为了扩展它,shell 执行:

export PKG_CONFIG_PATH=$(LIBPATH)
pkg-config --libs --static $(LIBNAME) -llzma

-llzma 对于 pkg-config 命令来说是一个无意义的选项,因此失败,正如你所看到的,它在 make 输出中提示:

Unknown option -llzma

就像:

$ pkg-config --cflags --libs zlib -llzma
Unknown option -llzma

因此,应通过以下方式输出所需的链接选项:

pkg-config --libs --static $(LIBNAME)

不会输出,也不会插入到LDFLAGS的值中。所以联动失败:

test.c:(.text+0x1c): undefined reference to `complearn_ncd_top'

因为libcomplearn尚未链接。更正 LDFLAGS 的设置至:

LDFLAGS = -static `export PKG_CONFIG_PATH=$(LIBPATH) && pkg-config --libs --static $(LIBNAME)` -llzma

在反引号扩展后跟随 -llzma

关于c - '未定义对 'function' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55158697/

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