SCons: как добавить библиотеку |
Добавил(а) microsin |
При компиляции примера linux/spiflash_read_id.c из репозитория [1] столкнулся с ошибкой подключения библиотеки lftdi в среде SCons. Простая строка компилятора GCC отрабатывала нормально без scons: $ gcc spiflash_read_id.c -o spiflash_read_id -lftdi
Однако при добавлении опции компилятора -lftdi к опциям GCC в скрипт SConstruct возникала ошибка. Скрипт SConstruct: env = Environment() env.Append(CCFLAGS='-lftdi') env.Program('spiflash_read_id.c') Ошибка компиляции: $ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o spiflash_read_id.o -c -lftdi spiflash_read_id.c
gcc -o spiflash_read_id spiflash_read_id.o
/bin/ld: spiflash_read_id.o: in function `main':
spiflash_read_id.c:(.text+0x23): undefined reference to `ftdi_new'
/bin/ld: spiflash_read_id.c:(.text+0x79): undefined reference to `ftdi_usb_open'
/bin/ld: spiflash_read_id.c:(.text+0x91): undefined reference to `ftdi_get_error_string'
/bin/ld: spiflash_read_id.c:(.text+0xc8): undefined reference to `ftdi_usb_reset'
/bin/ld: spiflash_read_id.c:(.text+0xdc): undefined reference to `ftdi_set_interface'
/bin/ld: spiflash_read_id.c:(.text+0xf5): undefined reference to `ftdi_set_bitmode'
/bin/ld: spiflash_read_id.c:(.text+0x10e): undefined reference to `ftdi_set_bitmode'
/bin/ld: spiflash_read_id.c:(.text+0x11d): undefined reference to `ftdi_usb_purge_buffers'
/bin/ld: spiflash_read_id.c:(.text+0x17b): undefined reference to `ftdi_usb_reset'
/bin/ld: spiflash_read_id.c:(.text+0x18a): undefined reference to `ftdi_usb_close'
/bin/ld: spiflash_read_id.o: in function `spi_init':
spiflash_read_id.c:(.text+0x3f0): undefined reference to `ftdi_write_data'
/bin/ld: spiflash_read_id.o: in function `spi_rw_buffer':
spiflash_read_id.c:(.text+0x71d): undefined reference to `ftdi_usb_purge_tx_buffer'
/bin/ld: spiflash_read_id.c:(.text+0x73c): undefined reference to `ftdi_write_data'
/bin/ld: spiflash_read_id.c:(.text+0x8c3): undefined reference to `ftdi_read_data'
collect2: error: ld returned 1 exit status
scons: *** [spiflash_read_id] Error 1
scons: building terminated because of errors.
Как видно из результата компиляции, опция -lftdi нормально передается в командную строку компилятора, но порядок следования опций другой, в результате чего линкер выдает ошибку. Решить проблему можно с помощью создания переменной окружения LIBS в скрипте SConstruct следующим образом: env = Environment() env.Append(LIBS=['ftdi']) env.Program('spiflash_read_id.c') Или так: Program('spiflash_read_id.c', LIBS=['ftdi']) После этого компиляция завершается нормально: $ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o spiflash_read_id.o -c spiflash_read_id.c
gcc -o spiflash_read_id spiflash_read_id.o -lftdi
scons: done building targets.
Дополнительную информацию по подключению библиотек к компиляции scons и путей поиска библиотек см. раздел "Сборка с подключением библиотек" статьи [2]. [Ссылки] 1. har-in-air / FT2232H_CODE_EXAMPLES site:github.com. |