2013-12-24 2 views
0

Я должен построить небольшую программу для запуска на приставке, и для этого я использую конкретный сборки набора инструментов: Набор инструментов финала-mipsisa32r2el-TimeSys-Linux-гнуКросс-сборка, выпуск ссылка

Строка состоит из двух частей: одного файла 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, я увидел, что функция определения в 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. Обычно аргументы библиотеки продолжаются, особенно со статическими библиотеками. –

+0

Фактически он меняет выход компоновщика, по крайней мере теперь я получил ошибку «неопределенная ссылка», но для внутренних данных и функций, еще не включенных в список файлов. Благодарю. – alexbuisson

ответ

1

Как объяснили @ H2CO3 и @Joe Z, проблема была в упорядочении параметров. Дополнительный статический набор lib с -l должен быть установлен по умолчанию .c file. Как и в следующем примере, переключатель из 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 
Смежные вопросы