【问题标题】:Undefined reference when using ta-lib/ta_lib.h file and Makefile使用 ta-lib/ta_lib.h 文件和 Makefile 时未定义的引用
【发布时间】:2022-11-15 23:07:21
【问题描述】:

我想在我的 C 代码中使用 ta_lib 函数并尝试导入 ta_lib 函数。头文件已正确导入,但我无法让链接器找到实际的库。 我想用 MAKE 和 gcc 进行编译过程。

首先我导入标题

#include <ta-lib/ta_libc.h>

然后当我需要使用一个函数时


TA_ADOSC(0, CSV_LENGTH - 1, temp_high, temp_low, temp_close, temp_volume, 3, 10, &beginIdx, &endIdx, tmp_adosc);

该程序使用我的 makefile 编译得很好


# create CC variable

CC = gcc

# create CFLAGS variable

CFLAGS =  -L/usr/local/lib -Wall -g

LDLIBS = -lta_lib -I/usr/local/include -lm

output: main.o
$(CC) $(CFLAGS) -o output main.o

main.o: main.c
$(CC) $(LDLIBS) -c main.c

# target: dependencies

# action

clean:
rm -f \*.o output

一旦我尝试运行make,我得到以下信息


gcc -L/usr/local/lib -Wall -g -o output main.o
/usr/bin/ld: main.o: in function `calculate_indicators': main.c:(.text+0x226): undefined reference to `TA_ADOSC'
collect2: error: ld returned 1 exit status
make: \*\*\* \[Makefile:10: output\] Error 1

根据我的理解,我需要修复到共享库的链接。

库已安装:


ldconfig -p | grep libta_lib.so

返回以下内容


    libta_lib.so.0 (libc6,x86-64) => /usr/local/lib/libta_lib.so.0
    libta_lib.so.0 (libc6,x86-64) => /lib/libta_lib.so.0
    libta_lib.so (libc6,x86-64) => /usr/local/lib/libta_lib.so
    libta_lib.so (libc6,x86-64) => /lib/libta_lib.so

因为我是 C 的新手并且使用外部库我找不到问题所在

【问题讨论】:

    标签: c makefile shared-libraries shared ta-lib


    【解决方案1】:

    您正在将库添加到编译线。他们需要被添加到关联线。像-I这样的预处理器选项被编译器,以及“在哪里可以找到库”选项,如-L链接器.

    还有,图书馆总是必须来结尾链接行,在所有目标文件之后。而且,-L“在哪里搜索”选项应该出现在-l“要查找的库”选项之前。

    像这样写你的规则:

    CFLAGS = -I/usr/local/include -Wall -g
    LDFLAGS = -L/usr/local/lib
    LDLIBS = -lta_lib -lm
    
    output: main.o
            $(CC) $(CFLAGS) $(LDFLAGS) -o output main.o $(LDLIBS)
    
    main.o: main.c
            $(CC) $(CFLAGS) -c main.c
    

    但是,最好让 make 为您完成工作;它知道如何正确编译东西(只要你设置了标准变量)。您根本不需要包含构建main.o 的规则。

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 1970-01-01
      • 2021-05-17
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2020-12-03
      相关资源
      最近更新 更多