Лапак и сторонние статические библиотеки для проекта CMake-Arduino. Нужно ли компилировать библиотеки с помощью avr-gcc? - PullRequest
0 голосов
/ 17 апреля 2019

Я использую CMake 3.12.3 и avr-gcc 4.9.2 с системой сборки arduino-cmake Я нашел на github. Я хотел бы использовать Lapack или Lapack ++ для создания линейной алгебры на arduino, но у меня есть сомнения относительно того, будут ли библиотеки без проблем скомпилированы с помощью инструмента avr-gcc. Честно говоря, я даже не знаю, нужно ли это делать.

Я проверил это, создав простую статическую библиотеку libtest.a и связав ее с моим проектом arduino. Я получил следующую ошибку при компиляции:

<libdir>/libtest.a: error adding symbols: File format not recognized
collect2: error: ld returned 1 exit status

Эта ошибка произошла из-за того, что я скомпилировал libtest.a с gcc вместо avr-gcc. Я не уверен, было ли это просто проблемой версии или эти два не идут вместе вообще. Затем я принудительно скомпилировал мою тестовую библиотеку с помощью avr-gcc, установив компиляторы в моих CMakeLists (этого, как я знаю, следует избегать):

set(CMAKE_C_COMPILER "/usr/bin/avr-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/avr-g++")

После этого изменения выполнение команды "cmake .." дало мне следующую ошибку:

-- Check for working C compiler: /usr/bin/avr-gcc
-- Check for working C compiler: /usr/bin/avr-gcc -- broken
CMake Error at /usr/share/cmake-3.12/Modules/CMakeTestCCompiler.cmake:52 (message):
The C compiler

"/usr/bin/avr-gcc"

is not able to compile a simple test program.
avr-gcc: error: unrecognized command line option ‘-rdynamic’

Очевидно, есть некоторые ошибки, связанные с этой ошибкой, но в качестве обходного пути я добавил еще одну строку в CMakeLists:

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

чтобы пропустить динамическое тестирование все вместе. С этими изменениями я мог создать libtest.a и связать его с моим проектом arduino без ошибок.

Теперь мой вопрос: имеет ли этот подход смысл? Является ли компиляция всех моих библиотек с помощью avr-gcc единственным способом включить их в мой проект arduino? Возможно ли это даже для таких библиотек, как Lapack?

Я знаю, что Lapack написан на фортране, и что он широко используется со встроенными контроллерами, но сам не имел опыта работы с ним. Использование Lapack ++ также было бы возможным, если бы это было проще!

Спасибо за любые идеи! Если вам понадобится более подробная информация, я с удовольствием предоставлю.

Приветствия

...