Я пытаюсь написать небольшую программу на C / C ++, которая одновременно получает данные с NI USB DAQ и воспроизводит аудио с помощью PortAudio. Проблема в том, что библиотека NI DAQ для Mac / Linux DAQmxBase должна быть построена под i386, и я просто не могу заставить PortAudio собирать для i386.
Я попытался установить CFLAGS и LDFLAGS для -arch=i386
перед запуском ./configure --disable-mac-universal && make && make install
, но пример кода NI DAQmxBase все равно не будет создан, когда я добавлю к нему вызовы PortAudio:
gcc -I../../includes -g -O2 -arch i386 acAnalogTest.c -framework nidaqmxbase -framework nidaqmxbaselv -o acAnalogTest
Undefined symbols for architecture i386:
"_Pa_Initialize", referenced from:
_main in ccf1t0bz.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
make: *** [acAnalogTest] Error 1
Makefile NI DAQmxBase выглядит следующим образом:
nilibs=-framework nidaqmxbase -framework nidaqmxbaselv
includes=-I../../includes
flags= -g -O2 -arch i386
cc=gcc
ao_examples = acAnalogTest acquireNScans
......
all : $(ao_examples)
% : %.c
>---$(cc) $(includes) $(flags) $< $(nilibs) -o $@
clean :
>---rm -f $(ao_examples)
Изменение флага -arch в Makefile DAQmxBase не работает:
gcc -I../../includes -g -O2 -arch x86_64 acAnalogTest.c -framework nidaqmxbase -framework nidaqmxbaselv -o acAnalogTest
In file included from acAnalogTest.c:1:
../../includes/NIDAQmxBase.h:104: warning: division by zero
../../includes/NIDAQmxBase.h:104: error: enumerator value for ‘assert_line_104’ is not an integer constant
../../includes/NIDAQmxBase.h:105: warning: division by zero
../../includes/NIDAQmxBase.h:105: error: enumerator value for ‘assert_line_105’ is not an integer constant
make: *** [acAnalogTest] Error 1
Я предполагаю, что это потому, что DAQmxBase написан с учетом типов данных i386. Строки вышеупомянутых ссылок на ошибки из NIDAQmxBase.h:
NIStaticAssert(sizeof(long) == 4, "Error: This platform is unsupported because long is not 4 bytes.");
NIStaticAssert(sizeof(int) == sizeof(long), "Error: This platform is unsupported because int is not the same size as long.");
Я могу просто создать некоторые из обычных примеров PortAudio сами по себе, но я хочу соединить PortAudio и DAQmxBase в одну и ту же программу и сделать так, чтобы они ладили. Должен быть способ построить PortAudio, чтобы он работал с DAQmxBase, нет?
Спасибо!
DAQmx Base версии 14.0 и 15.0 поддерживают 64-битные приложения, поэтому теперь вы можете обновить драйвер и попробовать снова.
Других решений пока нет …