gcc undefined reference to

瘦欲@ 提交于 2019-11-28 03:30:14

问题


I'm running..

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

and I'm getting the following error...

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

and TTSRequestFile is in the lib header but it has DllExport on the front of it which I'm wondering is the cause of my error? Any help much appreciated.

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

回答1:


Your link command is wrong. Libraries should be specified at the end of the command:

gcc ttssample.o -o ttsample -L. -lttsapi



回答2:


You could add preprocessor ifdefines around the DllExport call like so:

#ifdef _WIN32
// we are on windows

#elif defined __linux__
//we are on linux

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

#endif // os specific

I added for the three platforms I have been compiling cross platform for. Do note that the keywords I use to recognize platforms may change, but the _WIN32 one has been tested with windows 7 and 8. I found these a year ago on sourceforge I think. I couldn't find the page right now, but I'll get back to you if I find it.

As I cannot yet comment on Nikos C's answer I'll comment it here: Your link command is correct, I can of course not see you files, so I assume your paths are correct. What is important is that -l's need to be in correct order according to dependencies, but this is usually not a problem as far as I have experienced.



来源:https://stackoverflow.com/questions/14042103/gcc-undefined-reference-to

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!