Программирование ARM SCons: как добавить библиотеку Fri, March 29 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

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.
2. SCons: погружаемся глубже.

 

Добавить комментарий


Защитный код
Обновить

Top of Page