Кросс-билд, выпуск ссылок

0

Мне нужно создать небольшую программу для работы в телевизионной приставке, и для этого я использую конкретную конструкционную привязку: toolchain-final-mipsisa32r2el-timesys-linux-gnu

Строка состоит из двух частей: одного файла lib static.a и исполняемого файла, который использует библиотеку.

Библиотека правильно построена со следующим параметром:

mipsisa32r2el-timesys-linux-gnu-gcc -c --param max-inline-insns-single=2400 
-o ../../../build/LinuxHost_STB_release/_outLib/STB.o -O2 -fno-strict-aliasing 
-Winline -Wall -I../../../Modules -I../../../Source 
-I/opt/toolchains/toolchain-final-mipsisa32r2el-timesys-linux-gnu/include 
-I -fno-rtti ../../../Source/STBLib/STB.cpp

если я запускаю nm на libSTB.a, я видел, что функция define в STB.cpp:

 0000000000000124 T STB_Create
 0000000000000460 T STB_Destroy

Чтобы скомпилировать и связать исполняемый файл, я использую следующую командную строку:

mipsisa32r2el-timesys-linux-gnu-c++ -o ../../../build/LinuxHost_STB_release/STBExample 
--sysroot=/opt/toolchains/toolchain-final-mipsisa32r2el-timesys-linux-gnu/ 
-I/opt/toolchains/toolchain-final-mipsisa32r2el-timesys-linux-gnu/include 
-L../../../build/LinuxHost_STB_release 
-lSTB ../../../Source/STBLib/STBExample.c

Но я получаю следующую ошибку компоновщика:

STBExample.c:(.text+0x488): undefined reference to 'STB_Create'

Любая идея о том, где я совершил ошибку или о том, как расследовать?

  • 2
    Переверните -lSTB и ../../../Source/STBLib/STBExample.c .
  • 0
    Повторяю то, что сказал @H2CO3 H2CO3. Обычно аргументы библиотеки идут последними, особенно со статическими библиотеками.
Показать ещё 1 комментарий
Теги:
linker
cross-compiling

1 ответ

1

Как объяснили @H2CO3 и @Joe Z, проблема заключалась в упорядочивании параметров. Дополнительный статический набор lib с -l должен располагаться ПОСЛЕ файла.c. Как и в следующем примере, переключатель из 2 последних аргументов решил проблему.

mipsisa32r2el-timesys-linux-gnu-c++ -o ../../../build/LinuxHost_STB_release/STBExample 
--sysroot=/opt/toolchains/toolchain-final-mipsisa32r2el-timesys-linux-gnu/ 
-I/opt/toolchains/toolchain-final-mipsisa32r2el-timesys-linux-gnu/include 
-L../../../build/LinuxHost_STB_release 
../../../Source/STBLib/STBExample.c -lSTB

Ещё вопросы

Сообщество Overcoder
Наверх
Меню