我想在我的 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 的新手并且使用外部庫我找不到問題所在
uj5u.com熱心網友回復:
您正在將庫添加到編譯行。它們需要添加到鏈接行。編譯器-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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534155.html
