arm-none-linux-gnueabi-gcc编译标准库引用

本文详细介绍了在使用arm-none-linux-gnueabi-gcc进行交叉编译时遇到的找不到标准库问题及其解决方法,包括查找标准库路径、链接自定义标准库以及最终成功生成ARM动态库的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用arm-none-linux-gnueabi-gcc编译的时候会出现标准库无法找到的情况。例如:

[root@localhost wpcode]# arm-none-linux-gnueabi-gcc *.c -fPIC -shared -o libsdk.so 
opensslRsa.c:3:30: error: openssl/ossl_typ.h: No such file or directory
opensslRsa.c:4:25: error: openssl/pem.h: No such file or directory
opensslRsa.c:5:26: error: openssl/x509.h: No such file or directory
opensslRsa.c:6:25: error: openssl/rsa.h: No such file or directory
opensslRsa.c:8:26: error: openssl/des.h: No such file or directory

 

解决办法:

[root@localhost wpcode]# echo 'main(){}'|arm-linux-gcc -E -v - 
bash: arm-linux-gcc: 未找到命令...
[root@localhost wpcode]# echo 'main(){}'|arm-none-linux-gnueabi-gcc -E -V -
arm-none-linux-gnueabi-gcc: '-V' must come at the start of the command line
[root@localhost wpcode]# echo 'main(){}'|arm-none-linux-gnueabi-gcc -E -v -
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q1-203' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) 
COLLECT_GCC_OPTIONS='-E' '-v' '-funwind-tables'
 /usr/local/arm-2009q1/bin/../libexec/gcc/arm-none-linux-gnueabi/4.3.3/cc1 -E -quiet -v -iprefix /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/ -isysroot /usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc - -funwind-tables
ignoring nonexistent directory "/usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/local/include"
ignoring duplicate directory "/usr/local/arm-2009q1/bin/../lib/gcc/../../lib/gcc/arm-none-linux-gnueabi/4.3.3/include"
ignoring duplicate directory "/usr/local/arm-2009q1/bin/../lib/gcc/../../lib/gcc/arm-none-linux-gnueabi/4.3.3/include-fixed"
ignoring duplicate directory "/usr/local/arm-2009q1/bin/../lib/gcc/../../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/include
 /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/include-fixed
 /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/include
 /usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "<stdin>"
main(){}
COMPILER_PATH=/usr/local/arm-2009q1/bin/../libexec/gcc/arm-none-linux-gnueabi/4.3.3/:/usr/local/arm-2009q1/bin/../libexec/gcc/:/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/
LIBRARY_PATH=/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/:/usr/local/arm-2009q1/bin/../lib/gcc/:/usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/lib/:/usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/lib/:/usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/lib/
COLLECT_GCC_OPTIONS='-E' '-v' '-funwind-tables'

我们可以找到他的标准库的编译路径是:

#include <...> search starts here:
 /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/include
 /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/include-fixed
 /usr/local/arm-2009q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/include
 /usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/include

第二步:将我们的自带的标准库的路径找到标准库地址

[root@localhost wpcode]# find / -name pem.h
/usr/local/src/mysql-5.6.35/extra/yassl/include/openssl/pem.h
/usr/local/src/openssl-1.1.0e/include/openssl/pem.h
/usr/local/openssl/include/openssl/pem.h
[root@localhost wpcode]# 

第三步:建立连接地址

[root@localhost wpcode]# ln -s /usr/local/openssl/include/openssl /usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/include/openssl

好了,再次编译,生成ARM的动态库文件

[root@localhost wpcode]# arm-none-linux-gnueabi-gcc *.c -fPIC -shared -o libsdk.so 
sdklib.c: In function 'qrcode_verify':
sdklib.c:484: warning: passing argument 4 of 'get_grcode_all_elements' from incompatible pointer type
sdklib.c:484: warning: passing argument 5 of 'get_grcode_all_elements' from incompatible pointer type
sdklib.c:546: warning: passing argument 2 of 'read_data_file' from incompatible pointer type
sdklib.c:549: warning: passing argument 1 of 'getMac' from incompatible pointer type
sdklib.c:549: warning: passing argument 2 of 'getMac' from incompatible pointer type
sdklib.c:549: warning: passing argument 3 of 'getMac' from incompatible pointer type
sdklib.c:673: warning: passing argument 1 of 'getMac' from incompatible pointer type
sdklib.c:673: warning: passing argument 2 of 'getMac' from incompatible pointer type
sdklib.c:673: warning: passing argument 3 of 'getMac' from incompatible pointer type
WriteLog.c: In function 'WRITE_LOG':
WriteLog.c:88: warning: passing argument 2 of 'WriteLogFile' discards qualifiers from pointer target type
WriteLog.c: In function 'GetTime':
WriteLog.c:238: warning: incompatible implicit declaration of built-in function 'strncpy'
WriteLog.c: In function 'get_save_file_name':
WriteLog.c:264: warning: incompatible implicit declaration of built-in function 'strncpy'
WriteLog.c: In function 'GetCompletePath':
WriteLog.c:310: warning: incompatible implicit declaration of built-in function 'strcat'
WriteLog.c:311: warning: incompatible implicit declaration of built-in function 'strncpy'
WriteLog.c:311: warning: incompatible implicit declaration of built-in function 'strlen'
WriteLog.c: In function 'GetConfigValue':
WriteLog.c:338: warning: passing argument 1 of 'get_save_file_name' from incompatible pointer type
WriteLog.c: In function 'GetStringContentValue':
WriteLog.c:379: warning: incompatible implicit declaration of built-in function 'strcpy'
WriteLog.c:383: warning: incompatible implicit declaration of built-in function 'memset'
WriteLog.c:393: warning: incompatible implicit declaration of built-in function 'strlen'
WriteLog.c:407: warning: incompatible implicit declaration of built-in function 'memcpy'
WriteLog.c:449: warning: incompatible implicit declaration of built-in function 'strncpy'
WriteLog.c: In function 'GetConfigFileStringValue':
WriteLog.c:492: warning: incompatible implicit declaration of built-in function 'strcpy'
WriteLog.c:496: warning: incompatible implicit declaration of built-in function 'strcpy'
[root@localhost wpcode]# ls
Config.ini  mackey      Makefile      opensslRsa.h  publickey      sdk.h     sdklib.o      test    test.o                   WriteLog.c  WriteLog.o
libsdk.so   mackey.txt  opensslRsa.c  opensslRsa.o  publickey.pem  sdklib.c  signdata.txt  test.c  WriteLog-2018-11-07.log  WriteLog.h
[root@localhost wpcode]# 
[root@localhost wpcode]# file libsdk.so 
libsdk.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped
[root@localhost wpcode]# 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗亚方舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值