Не могу собрать PortAudio для i386, чтобы он хорошо работал с NI DAQmxBase

Я пытаюсь написать небольшую программу на 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, не так ли?

Спасибо!


person Tom    schedule 31.01.2014    source источник


Ответы (1)


DAQmx Base версий 14.0 и 15.0 поддерживает 64-разрядные приложения, поэтому теперь вы сможете обновить драйвер и повторить попытку.

DAQmx Base 15.0 для Mac

person Joe Friedrichsen    schedule 08.12.2015