Статически ссылка против карманного сфинкса (Библиотека)

Я разрабатываю небольшую программу с Pocketsphinx (речь в текст — библиотека).
В Windows я использовал Code :: Blocks в качестве среды разработки, и мне удалось создать программу.
Теперь я пытаюсь перенести свою программу на Linux, и у меня возникли небольшие проблемы с связью с pocketsphinx.

Это Makefile:

CC = g++
CFLAGS = -Wall -std=c++11
LDFLAGS = -I/usr/local/include/sphinxbase -I/usr/local/include/pocketsphinx

OBJ = obj/Application.o obj/Main.o obj/Recorder.o

all: $(OBJ)
$(CC) -L/usr/local/lib -o bin/Eve $(OBJ) -s -lsphinxbase -lpocketsphinx

obj/Main.o: src/Main.cpp
$(CC) $(CFLAGS) $(LDFLAGS) -c src/Main.cpp -o obj/Main.o

obj/Application.o: src/Application.cpp src/Application.hpp
$(CC) $(CFLAGS) $(LDFLAGS) -c src/Application.cpp -o obj/Application.o

obj/Recorder.o: src/Recorder.cpp src/Recorder.hpp
$(CC) $(CFLAGS) $(LDFLAGS) -c src/Recorder.cpp -o obj/Recorder.o

Это то же самое, что я использовал в Windows, я просто изменил путь к файлу.

Я получаю следующую ошибку:

$ make
g++ -Wall -std=c++11 -I/usr/local/include/sphinxbase -I/usr/local/include/pocketsphinx -c src/Application.cpp -o obj/Application.o
g++ -Wall -std=c++11 -I/usr/local/include/sphinxbase -I/usr/local/include/pocketsphinx -c src/Main.cpp -o obj/Main.o
g++ -Wall -std=c++11 -I/usr/local/include/sphinxbase -I/usr/local/include/pocketsphinx -c src/Recorder.cpp -o obj/Recorder.o
g++ -L/usr/local/lib -o bin/Eve obj/Application.o obj/Main.o obj/Recorder.o -s  -lsphinxbase -lpocketsphinx
obj/Recorder.o: In function `Recorder::Recorder()':
Recorder.cpp:(.text+0x1c0): undefined reference to `ad_open_sps'
Recorder.cpp:(.text+0x20d): undefined reference to `ad_read'
Recorder.cpp:(.text+0x215): undefined reference to `cont_ad_init'
obj/Recorder.o: In function `Recorder::~Recorder()':
Recorder.cpp:(.text+0x2f3): undefined reference to `cont_ad_close'
Recorder.cpp:(.text+0x303): undefined reference to `ad_close'
obj/Recorder.o: In function `Recorder::recognizeFromMicrophone()':
Recorder.cpp:(.text+0x37a): undefined reference to `ad_start_rec'
Recorder.cpp:(.text+0x395): undefined reference to `cont_ad_calib'
Recorder.cpp:(.text+0x3f0): undefined reference to `cont_ad_read'
Recorder.cpp:(.text+0x4e6): undefined reference to `cont_ad_read'
Recorder.cpp:(.text+0x5b5): undefined reference to `ad_stop_rec'
Recorder.cpp:(.text+0x5d8): undefined reference to `ad_read'
Recorder.cpp:(.text+0x5f4): undefined reference to `cont_ad_reset'
collect2: error: ld returned 1 exit status
make: *** [all] Fehler 1

Я не думаю, что это название искажения проблема, так как я собрал библиотеку самостоятельно, используя предоставленный Makefile.

Что я могу сделать, чтобы ссылаться на библиотеку без ошибок?

РЕДАКТИРОВАТЬ: я понял, как заставить это работать. Я просто изменил правило цели «все» на это:

$(CC) -static -L/usr/local/lib -o bin/Eve $(OBJ) -s  -lpocketsphinx -lsphinxbase -lsphinxad -lpthread

0

Решение

Такие функции, как ad_read, определены в библиотеке libsphinxad, вам нужно добавить их в командную строку компоновщика:

g++ -static -L/usr/local/lib -o bin/Eve obj/Application.o obj/Main.o obj/Recorder.o \
-lpocketsphinx -lsphinxbase -libsphinxad

Обратите внимание, что порядок библиотек важен.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector