Компиляция частей кода Festival, написанного на C ++, в отдельной программе C ++ - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь использовать отдельные части кода Festival (написанного на C ++) и пытаюсь использовать их в моих собственных C++ программах. Обратите внимание, что этот вопрос не об использовании Festival API, а о функциях в Festival, которые можно использовать напрямую.

Программа, которую я написал, использует стиль C++ string и пытается инициализировать объект типа EST_String (внутренняя реализация класса String в Festival). Затем я пытаюсь напечатать объект.

Код, который у меня есть:

/*EST_String is a string implementation for the festival project.
 * This program simply takes in a C++-style string and returns an EST_String. 
 * This program is being used to test for makefiles etc.
 */

#include <iostream>
#include <EST_String.h>
#include <string>
#include <cstdlib>
using namespace std;

int main(int argc, char *argv[]) {

  if(argc != 2) {
    cout << "Correct usage: <binary> <string>" << endl;
    exit(5);
  }

  string word(argv[1]);
  EST_String e(word.c_str());  //init EST_String.

  cout << "C++ String = " << word << endl;
  cout << "EST_String = ";
  cout << e;

  return 0;
}  

Я пытаюсь скомпилировать его (непосредственно из командной строки (в настоящее время нет make-файла)) примерно так:

g++ -I../../speech_tools/include -I../../speech_tools/base_class/string -L../../speech_tools/lib/ -lestbase -lncurses -lasound -leststring -lestools usingESTString.C -o usingESTString  

Я получаю ошибку:

/tmp/cczyGTfm.o: In function `main':
usingESTString.C:(.text+0x91): undefined reference to `EST_String::EST_String(char const*)'
/tmp/cczyGTfm.o: In function `EST_Chunk::operator--()':
usingESTString.C:(.text._ZN9EST_ChunkmmEv[EST_Chunk::operator--()]+0x3e): undefined reference to `EST_Chunk::~EST_Chunk()'
usingESTString.C:(.text._ZN9EST_ChunkmmEv[EST_Chunk::operator--()]+0x49): undefined reference to `EST_Chunk::operator delete(void*)'
collect2: ld returned 1 exit status  

Как я могу получить код для правильной компиляции? Куда я иду не так?

Ответы [ 3 ]

1 голос
/ 01 марта 2018

Попробуйте добавить это в конец вашей команды g ++ link: -I/usr/include/festival -I/usr/include/speech_tools -I/usr/include/boost -lFestival -lestools -lestbase -leststring

Убедиться, что каталог заголовков festival и speech_tools находится по адресу: /usr/include

cd /usr/include
ls festival
ls speech_tools

Я пытаюсь восстановить cogita с поддержкой фестиваля, и моя программа успешно соединилась после компиляции объектных файлов с использованием этой строки

g++ -Wall -fPIC -Wno-variadic-macros -fopenmp -std=gnu++0x -O2 -g -fstack-protector cogitaconfig.o go-irc.o irc.o whirr-sockets.o -o cogIRCProgram -rdynamic /usr/local/lib/libcogutil.so -Wl,-rpath,/usr/local/lib -I/usr/include/festival -I/usr/include/speech_tools -I/usr/include/boost -lFestival -lestools -lestbase -leststring

1 голос
/ 19 января 2012

Попробуйте поместить в строку библиотеки, с которыми вы связываетесь последними.

Компоновщик часто разрешает ссылки типа «назад», это означает, что порядок файлов, представленных в командной строке, важен: ему нужны файлы, содержащиесначала ссылки, затем библиотеки, содержащие эти ссылки.

0 голосов
/ 11 марта 2012

Я тоже пытался связать с API фестиваля, и созданный мною Makefile выполняет следующую команду ссылки

g++ -lpthread build/fetch/festival/src/lib/libFestival.a  build/fetch/speech_tools/lib/libestools.a  build/fetch/speech_tools/lib/libestbase.a build/fetch/speech_tools/lib/libeststring.a -lcurses -ldl -lm -lstdc++ build/test/speaker.o build/common/message-queue.o build/speaker/speaker-public.o build/fetch/festival/src/lib/libFestival.a -o build/bin/speaker-test

, и я получаю огромную (25k строк) ошибку компоновщика, полную неопределенных ссылокчасть из которых здесь: http://pastebin.com/PCyV8xAH). Я могу утверждать, что файлы * .a существуют (хотя я не уверен, были ли они построены правильно или нет). Я компилирую speech_tools с make -j7 и festivalс make.

Есть предложения?

Я использую Debian wheezy.

...