10

我在跑..

gcc -c -I/usr/vt/sample ttssample.c
gcc -L. -lttsapi ttssample.o -o ttsample

我收到以下错误...

ttssample.o: In function `_TTSFile':
ttssample.c:(.text+0x352): undefined reference to `TTSRequestFile'
ttssample.o: In function `_TTSFileEx':
ttssample.c:(.text+0x5e0): undefined reference to `TTSRequestFileEx'
ttssample.o: In function `_TTSBuffer':
ttssample.c:(.text+0x833): undefined reference to `_TTSRequestBuffer'
ttssample.o: In function `_TTSBufferEx':
ttssample.c:(.text+0xabd): undefined reference to `_TTSRequestBufferEx'
ttssample.o: In function `_TTSBuffering_cont':
ttssample.c:(.text+0xcbf): undefined reference to `_TTSRequestBuffer'
ttssample.o: In function `_TTSBuffering_stop':
ttssample.c:(.text+0xf2d): undefined reference to `_TTSRequestBuffer'
ttssample.o: In function `_TTSBuffering_SSML':
ttssample.c:(.text+0x122b): undefined reference to `_TTSRequestBufferSSMLEx'   
ttssample.o: In function `_TTSStatus':
ttssample.c:(.text+0x157b): undefined reference to `TTSRequestStatus'
collect2: ld returned 1 exit status

并且 TTSRequestFile 在 lib 标头中,但它的前面有 DllExport,我想知道这是我错误的原因吗?非常感谢任何帮助。

DllExport int TTSRequestFile(char *szServer, int nPort, char *pText, int nTextLen, char *szSaveDir, char *szSaveFile, int nSpeakerID, int nVoiceFormat);
4

2 回答 2

24

您的链接命令是错误的。应在命令末尾指定库:

gcc ttssample.o -o ttsample -L。-lttsapi
于 2012-12-26T15:18:36.873 回答
-1

您可以像这样在调用ifdefines周围添加预处理器:DllExport

#ifdef _WIN32
// we are on windows

#elif defined __linux__
//we are on linux

#elif defined __APPLE__&__MACH__
// we are on mac

#endif // os specific

我为我一直为其编译跨平台的三个平台添加了。请注意,我用来识别平台的关键字可能会发生变化,但_WIN32已经在 Windows 7 和 8 上进行了测试。我认为是一年前在 sourceforge 上发现的。我现在找不到该页面,但如果我找到了,我会尽快与您联系。

由于我还不能评论 Nikos C 的答案,所以我会在这里评论:你的链接命令是正确的,我当然看不到你的文件,所以我假设你的路径是正确的。重要的是-l' 需要根据依赖关系以正确的顺序排列,但就我所经历的而言,这通常不是问题。

于 2012-12-26T15:15:33.793 回答