我试图使用Festival代码的选择性部分(用C ++编写),并尝试在我自己的C++程序中使用它们。请注意,此问题不是有关使用Festival API的问题,而是有关Festival中可以直接使用的函数的问题。

我编写的程序采用C++样式string并尝试初始化EST_String类型的对象(Festival中String类的内部实现)。然后,我尝试打印对象。

我有的代码:

/*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;
}


我正在尝试像这样编译它(直接从命令行(目前没有makefile)):

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


如何获得正确编译的代码?我要去哪里错了?

最佳答案

尝试将与上一个链接的库放在行中。

链接器通常将引用类型解析为“向后”,这意味着在命令行上显示的文件顺序很重要:它首先需要包含引用的文件,然后是包含这些引用的库。

10-07 16:43