Мне нужно создать небольшую программу для работы в телевизионной приставке, и для этого я использую конкретную конструкционную привязку: 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'
Любая идея о том, где я совершил ошибку или о том, как расследовать?
Как объяснили @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
-lSTB
и../../../Source/STBLib/STBExample.c
.