Ich bin mit ..gcc undefined reference to
gcc -c -I/usr/vt/sample ttssample.c
gcc -L. -lttsapi ttssample.o -o ttsample
und ich bekomme die folgende Fehlermeldung ...
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
und TTSRequestFile im lib-Header, aber es hat Dllexport auf Die Vorderseite davon, die ich frage, ist die Ursache meines Fehlers? Jede Hilfe wird sehr geschätzt.
DllExport int TTSRequestFile(char *szServer, int nPort, char *pText, int nTextLen, char *szSaveDir, char *szSaveFile, int nSpeakerID, int nVoiceFormat);
Es funktionierte danke !!! – JLB
Eine Idee, warum das Ausführen der ausführbaren Datei fehlschlagen würde? Fehler beim Laden gemeinsamer Bibliotheken: -melf_x86_64: Gemeinsame Objektdatei kann nicht geöffnet werden: Keine solche Datei oder kein Verzeichnis – JLB
@JLB Da sich die Bibliothek nicht in einem Verzeichnis befindet, das standardmäßig vom Laufzeitladeprogramm durchsucht wird. Sie müssten die Bibliothek in ein gesuchtes Verzeichnis (wie/usr/local/lib) stellen oder die Umgebungsvariable LD_LIBRARY_PATH exportieren, um das Verzeichnis einzubeziehen, in dem sich die Bibliothek befindet (wie LD_LIBRARY_PATH = "/ home/me/mylib") Sie würden Ihr Programm mit einem rpath verknüpfen, der auf das Verzeichnis verweist, in dem sich die lib befindet, oder Sie verwenden die Funktion $ ORIGIN von rpath, um immer nach der lib in einem Verzeichnis mit einem relativen Pfad zu dem der ausführbaren Datei zu suchen. Durchsuchen Sie Google nach "rpath Herkunft", um mehr darüber zu erfahren. –