库的编译

来源:互联网 发布:国家网络安全法 编辑:程序博客网 时间:2024/06/06 16:51


一,缺失:

编译工具肯定也要移植的

如libstdc++  :这种在交叉工具链的arm-none-linux-gnueabi的lib文件夹里有,移植即可


可在编译环境添加库

可在编译工具里添加库

甚至可以将库源码放在需要编译的库里


注意依赖库不要有版本冲突

库编译后运行时依赖的库版本跟编译器有关,如果过高可选择低版本编译器来编译


实在不行可以换个版本的开源库编译


编译前可以在外部设置环境变量,如下例子:

export CC=arm-none-linux-gnueabi-gcc
export AR=arm-none-linux-gnueabi-ar

export LDFLAGS="-L/home/edison/abel/printer/abel/lib"
export CFLAGS="-I/home/edison/abel/printer/abel/include"  (C的依赖的头文件)
export CPPFLAGS=-I/home/edison/abel/printer/abel/include (CPP的依赖头文件)

export LIBS=-L/home/edison/abel/printer/abel/lib 

不过这样有时Makefile原有的连接配置还会保存,所以再加上新的路径会冲突,所以得进入makefile删除原来的

最好还是在.configure 配置,然后进入makefile里看会不会冲突,特别是当编译时出现依赖路径不是自己指定的话更要进入makefile里看


或者可以把需要的库编译并安装在某个文件夹下,然后编译库时指定这些库安装的路径来依赖

如果有时候找不到库是因为自己有的库版本且版本高的话,可以用个软连接,用低版本的名字链接高版本的库



有时候编译的时候库是安装的,通过apt也是最新的,这时候可以通过指定决定路径来解决

configure: error: could not find GNU libtool >= 1.5.26   通过--with-libtool=/usr/share/libtool 解决




二,选项

1. 一般编译选项里,有enabl的选项都可以disable,反之亦然

2. 

  --build=编译该软件所使用的平台
  --host=该软件将运行的平台
  --target=该软件所处理的目标平台,类似交叉工具链,运行于PC,但编译的目标是ARM

一般指定的目标是需要使用编译工具链的前缀名(target也是,如果运行处理的目标是ARM的,那么就用交叉工具链的前缀)





原创粉丝点击