【问题标题】:Cross-compilation and libraries交叉编译和库
【发布时间】:2016-04-28 18:37:34
【问题描述】:

在交叉编译期间,我收到此链接器错误:

/home/tech/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lfontconfig

这是 g++ 命令行:

/home/tech/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -Wl,-rpath-link,/mnt/rasp-pi-rootfs/opt/vc/lib -Wl,-rpath-link,/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/mnt/rasp-pi-rootfs/lib/arm-linux-gnueabihf -mfloat-abi=hard --sysroot=/mnt/rasp-pi-rootfs -Wl,-O1 -o fontconfig fontconfig.o   --sysroot=/mnt/rasp-pi-rootfs -lpthread -L/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/ -lfreetype -lfontconfig 

ls /mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libfontconfig*

/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libfontconfig.so.1
/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf/libfontconfig.so.1.8.0

我不明白“为什么”链接器找不到那个库。 在这种情况下,您建议如何做进一步调查?

【问题讨论】:

    标签: c++ linker cross-compiling linker-errors fontconfig


    【解决方案1】:

    链接器需要带有 .a 库扩展的导入库以进行链接器操作,因为它包含链接器进行链接所需的类和函数的签名,而 .so 库是运行时使用的共享对象。

    你需要找到你有libfontconfig.a的目录(例如:通过命令locate libfontconfig.a或'find / -name libfontconfig.a')然后用-L/path/将它添加到命令行的/目录。

    【讨论】:

    • 感谢您的解释!我安装了静态库(通过安装 -dev 包)。对于这个特定的库,它起作用了!但是对于另一个具有相同错误的人却没有。示例:在我遇到 libicui18n not found 错误之前,使用 .a 文件安装 -dev 包会导致另一个错误:libicui18n.so: undefined reference to `__cxa_throw_bad_array_new_length@CXXABI_1.3.8'。但这次它明确地说 *.so。
    • /home/tech/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -c -pipe -marm -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -mabi=aapcs-linux -mfloat-abi=hard --sysroot=/mnt/rasp-pi-rootfs -O2 -std=gnu++0x -Wall -W -fPIC -I。 -I/usr/include/x86_64-linux-gnu -I/usr/include/freetype2 -I/usr/include -I../../../mkspecs/devices/linux-rasp-pi-g++ -o icu.o icu.cpp
    • /home/tech/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -Wl,-rpath-link,/mnt/rasp-pi-rootfs /opt/vc/lib -Wl,-rpath-link,/mnt/rasp-pi-rootfs/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/mnt/rasp-pi-rootfs/lib /arm-linux-gnueabihf -mfloat-abi=hard --sysroot=/mnt/rasp-pi-rootfs -Wl,-O1 -o icu icu.o --sysroot=/mnt/rasp-pi-rootfs -lpthread - licui18n -licuuc -licudata
    • 是的,您使用的库版本似乎没有符号 __cxa_throw_bad_array_new_length@CXXABI_1.3.8。您可以通过使用 .a 库的单个参数调用的命令 nm 来检查 .a 库中可用的符号。
    • @FrancescoArgese:链接器不需要您链接静态库以进行交叉编译。通过静态编译,您最终会将库编译到您发布的二进制文件中,但这绝不是编译成功的必要条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多