【发布时间】:2013-12-24 09:30:33
【问题描述】:
我必须构建一个在机顶盒上运行的小程序,为此我使用特定的构建工具链:toolchain-final-mipissa32r2el-timesys-linux-gnu
构建由两部分组成:一个 lib 静态 .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
如果我在 libSTB.a 上运行 nm,我看到 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'
知道我在哪里犯了错误或如何调查吗?
【问题讨论】:
-
翻转
-lSTB和../../../Source/STBLib/STBExample.c参数。 -
呼应@H2CO3 所说的。通常,库参数放在最后,尤其是静态库。
-
有效地改变了链接器的输出,至少现在我得到了错误“未定义的引用”,但是对于内部数据和函数,还没有包含在我的文件列表中。谢谢。
标签: c++ c linux linker cross-compiling