Hello, Thank you everybody for the very useful suggestions. I am using msys gcc on windows XP. Has anyone tried to compile the analog output examples? I manage to compile and execute the analog input examples with no problems following the detailed expanation found here but when I try the analog output examples I get this error from gcc:
$ gcc ContGen-IntClk-AnlgStart.c -o ContGen-IntClk-AnlgStart.exe "C:\Program Fi les\National Instruments\NI-DAQ\DAQmx ANSI C Dev\lib\libnidaqmx.a" -I "C:\Progr am Files\National Instruments\NI-DAQ\DAQmx ANSI C Dev\include" In file included from ContGen-IntClk-AnlgStart.c:53: C:/Program Files/National Instruments/NI-DAQ/DAQmx ANSI C Dev/include/NIDAQmx.h: 77: error: syntax error before "int64" C:/Program Files/National Instruments/NI-DAQ/DAQmx ANSI C Dev/include/NIDAQmx.h: 77: warning: data definition has no type or storage class C:/Program Files/National Instruments/NI-DAQ/DAQmx ANSI C Dev/include/NIDAQmx.h: 85: error: syntax error before "uInt64" C:/Program Files/National Instruments/NI-DAQ/DAQmx ANSI C Dev/include/NIDAQmx.h: 85: warning: data definition has no type or storage class and so on for many other lines. in NIDAQmx.h
Hello everybody, I encountered another problem. I am using Msys gcc on win XP to compile custom c code. I manage to compile and run the examples no problem, linking fine, Analog I/O working.
I get segfault error when calling DAQmxErrChk (DAQmxCreateTask("",&taskHandle)); but I can call functions such as: DAQmxErrChk (DAQmxGetExtCalLastDateAndTime ("Dev1",&year,&month,&day,&hour,&minute)); or DAQmxErrChk (DAQmxResetDevice ("Dev1")); without any problems and get sensible output. Does anyone know if there is any particular precaution when doing task creation? how is the memory allocated by CreateTask? are there any particular compiler options that should not be used?
more info on the problem just reported: What I am trying to do is to compile a nidaqmx code (say for example one of the analog output examples) into a dll and then dynamically load that into the custom software we use in the lab. Compilation and linking with libnidaqmx.a obtained following the instructions in this forum are both successful. I am able to load the generated dll into the main software but when the function: DAQmxCreateTask("",&taskHandle) is called, I get segfault.
I tried recompiling the main program from source, including my code linked statically and it works fine, so it is something due to the fact that I am trying to compile the nidaqmx code into a dll.
Hello all, this is a short message to say that after two weeks of test I have not yet solved the problem. Has anyone encountered a similar problem? short summary: I am using mingw gcc on win XP. Followed all instructions to obtain libnidaqmx.a (actually I did not even install unxutils, I just needed "sed" from gnuwin32 to run the mkdef.sh script). I manage to succesfully compile and execute the examples included with nidaqmx. I manage to sucessfully compile and execute custom nidaqmx code. now I need to create a dll plug-in with the following command: gcc -o ../../bin/nidaqmx6229.dll -mwindows -shared -L../../lib -L./lib/. ./obj/nidaqmx6229.o "C:\Program Files\National Instruments\NI-DAQ\DAQmx ANSI C Dev\lib\libnidaqmx.a" -lalleg -lxvin -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--out-implib=./lib/libnidaqmx6229.a
which creates a dll that I can then load into a main software. This is a custom software we use in our laboratory and it is all written in ANSI C. The command executes correctly, and it creates the requested dll. Nevertheless, when I try to execute some nidaqmx function called from this dll I get segfault. As a check I recompiled the whole software, linking my plug-in as a static object and it works fine. So the problem must be due to the fact that I am trying to build a dll, or that I am not building it correctly. Any suggestion is appreciated.
I am doing something similar. In my case I am wrapping nidaqmxbase.dll in another dll for access from Java (JNI). After doing everything outlined in dplamp's reply (#14), this is gcc command line that is working fine for me:
The -mno-cygwin is just so that I don't depend on cygwin1.dll. The -lnidaqmxbase (or libdaqmxibase.a) is the library prepared using instructions and scripts from dmplam's earlier reply. The -add-stdcall-alias is the trick that makes it work (see stadel's earlier reply #5 and also good overview from David Caldwell). Naturally, if you are not building JNI code you should remove related -I"..Java.." arguments.
Hello Vladimir, Thanks a lot for the reply. I tried adding the -Wl,--add-stdcall-alias option, but it got no better. Maybe I misunderstood stadel's explanation, but I thought that was related to the fact that, at compile time, gcc could not link proberly because it was not finding the right names and decorations. In my case, I am able to build a dll without any problem, the problem is when I try to execute a function contained in it. I tried installing dr. mingw to have debugging information about the segfault but I got no better either. this is the response I get: xvin.exe caused an Access Violation at location 64019d9a Reading from location 64019d9a.
Registers: eax=00000001 ebx=0a1c0e00 ecx=7c927304 edx=7c98c0d8 esi=0a1c0e00 edi=64043e74 eip=64019d9a esp=0022dd00 ebp=0022dd04 iopl=0 nv up ei pl nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00200202
Call stack: 64019D9A 0A1D10C0 6401A450 6DA3A4DC
But to be honest I do not understand what it means. Any other suggestion? Thanks
steorn - Where did you get a "libnidaqmx.a" file? I am trying to use the NIDAQmx driver in Linux with some real-time DAQ software (RTAI, not LabView) and in order to use the daqmx functions I have to link a static library when compiling. The only library I have is a .so and I have been looking for a way to get a static version somehow. If you have one is it possible to send it to me or tell me a way to generate one?