[英]arm-linux-gcc compiler linking, file could not be found
I am on Ubuntu and have developed a modbus1.c that #includes a certain modbus.h. 我在Ubuntu上开发了一个modbus1.c,#include一个modbus.h。 I want to cross compile what I wrote to run on an embedded computer;
我想交叉编译我写的在嵌入式计算机上运行的内容; to do this I know I need to use the arm-linux-gcc crosscompiler.
要做到这一点我知道我需要使用arm-linux-gcc交叉编译器。
I have this library called libmodbus installed on Ubuntu. 我在Ubuntu上安装了名为libmodbus的库。 It conveniently uses pkg-config (which defines -I/usr/include/modbus and -lmodbus for --cflags and --libs respectively)
它方便地使用pkg-config(分别为--cflags和--libs定义-I / usr / include / modbus和-lmodbus)
When I use the regular GCC: 当我使用常规GCC时:
gcc -o modbus1-release modbus1.c `pkg-config --cflags --libs libmodbus`
Everything works fine, modbus1-release is created and I can execute it. 一切正常,modbus1-release已创建,我可以执行它。
The problem arises when I try to use the arm-linux-gcc compiler: 当我尝试使用arm-linux-gcc编译器时出现问题:
/usr/local/arm-linux/bin/arm-linux-gcc -o modbus1-release modbus1.c `pkg-config --cflags --libs libmodbus`
/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: cannot find -lmodbus
collect2: ld returned 1 exit status
make: *** [release] Error 1
Apart from a direct answer, when I imagine what could 'help' me Im thinking answer to the following questions might 'help' me: 除了直接回答,当我想象什么可以“帮助”我时我想回答以下问题可能会“帮助”我:
My intuition is telling me that the problem is coming from linking... the cc and ld in the arm-linux-gcc toolchain is missing infromation that the normal cc and ld has. 我的直觉告诉我问题来自链接...... arm-linux-gcc工具链中的cc和ld缺少普通cc和ld所具有的信息。
Any info will help! 任何信息都会有帮助!
TIA TIA
Niko 尼科
verbose mode... 详细模式......
/usr/local/arm-linux/bin/arm-linux-gcc -v -o modbus1-release modbus1.c `pkg-config --cflags --libs libmodbus`
Reading specs from /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/specs
Configured with: ../configure --target=arm-linux --disable-shared --with-headers=/home/gerg/new-wave.xscale/linux-2.4.x/include --with-gnu-as --with-gnu-ld --enable-multilib
Thread model: posix
gcc version 3.3.2
/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/cc1 -quiet -v -I/usr/include/modbus -iprefix /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/ -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=2 -D__ARM_ARCH_4T__ modbus1.c -quiet -dumpbase modbus1.c -auxbase modbus1 -version -o /tmp/ccVLqs9W.s
GNU C version 3.3.2 (arm-linux)
compiled by GNU C version 3.2.2 20030222 (Red Hat Linux 3.2.2-5).
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/lib/gcc-lib/arm-linux/3.3.2/include"
ignoring nonexistent directory "/usr/local/arm-linux/sys-include"
ignoring duplicate directory "/usr/local/arm-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/modbus
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/include
/usr/local/arm-linux/arm-linux/sys-include
/usr/local/arm-linux/arm-linux/include
End of search list.
/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/as -o /tmp/ccMyv4IL.o /tmp/ccVLqs9W.s
/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/collect2 -dynamic-linker /lib/ld-linux.so.2 -X -m armelf_linux -p -o modbus1-release /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/lib/crt1.o /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/crti.o /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/crtbegin.o -L/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2 -L/usr/local/arm-linux/bin/../lib/gcc-lib -L/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/lib -L/usr/local/lib/../arm-linux/lib -L/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/../../.. /tmp/ccMyv4IL.o -lmodbus -lgcc -lc -lgcc /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/crtend.o /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/crtn.o
/usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: cannot find -lmodbus
collect2: ld returned 1 exit status
make: *** [release] Error 1
如果你想在交叉编译情况下使用pgk_config
(显然支持,至少在较新版本的autotools上支持),你需要在Makefile中设置PKG_CONFIG_SYSROOT_DIR
,否则pkg_config
将设置一个适合主机编译器的环境,稍后尝试将交叉编译的二进制文件与主机库相结合,这显然不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.