Home Forums Software Development Compiling samples with GCC Reply To: Compiling samples with GCC

#260
Anders
Participant

Hi Oskar,

since the API is a plain C API, it should be possible to use it from just about any compiler.

I tried to reproduce the error that you described. I could get the sample to build and run using gcc/mingw, but I didn’t get the same error message that you did, so I’m not sure if this solves your problem. Anyway:

I used the version of mingw/gcc from SourceForge: sourceforge.net/projects/mingw/files/.

Working from the Windows command line, I ran the same command as you did, but with an additional “-Iinclude” to point out the include path (this must have been a typo). There were errors:

C:\...>gcc .\samples\MinimalGazeDataStream\MinimalGazeDataStream.c -Iinclude -lTobii.EyeX.Client -Llib\x64 -o min.exe
C:\...\cckdo7P5.o:MinimalGazeDataStream.c:(.text+0x23): undefined reference to '
_imp__txFormatObjectAsText'
[several similar errors]
c:/.../ld.exe: C:\...\cckdo7P5.o: bad reloc address 0x0 in section '.data'
c:/.../ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

It seemed that the linker couldn’t find the EyeX API functions. I messed around with the import declaration settings for a while, but then I realized that the linker might be looking for 32-bit symbols and not 64-bit symbols. So I changed the library path. That worked much better. Now I had only a single undefined reference left:


C:\...>gcc .\samples\MinimalGazeDataStream\MinimalGazeDataStream.c -Iinclude -lTobii.EyeX.Client -Llib\x86 -o min.exe
C:\...\ccYKt0oq.o:MinimalGazeDataStream.c:(.text+0x3cb): undefined reference to '_gettch'
collect2.exe: error: ld returned 1 exit status

The _gettch() function is Microsoft’s character set-neutral equivalent of getch(). No need for that in this sample. So we need a few edits in MinimalGazeDataStream.c: remove the tchar.h #include, change the signature of the _tmain function to a plain main, and replace _gettch with getch.

With those changes applied I could get the sample to compile, link, and run. That is, to get it to run properly you’ll also have to copy the dll file to the same directory as the exe file. But that’s standard procedure.

But like I said, I’m not sure if this solves your actual problem. If I understand your question correctly you were using a different build of the mingw/gcc compiler and it also seems that you were using a different shell. Perhaps escaping the dots in Tobii.EyeX.Client could help?