简体   繁体   English

arm-linux-gcc编译器链接,无法找到文件

[英]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: 除了直接回答,当我想象什么可以“帮助”我时我想回答以下问题可能会“帮助”我:

  1. how do I expand all the ../ and ../../../../? 如何扩展所有../和../../../../? If I know where it is then maybe I can put -lmodbus in there 如果我知道它在哪里,那么也许我可以把-lmodbus放在那里
  2. what is -lmodbus? 什么是-lmodbus? is it a file? 它是一个文件? where is it such that the regular gcc and ld can find it? 常规gcc和ld可以在哪里找到它?
  3. is -la flag and modbus the file name? 是-la flag和modbus的文件名?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM