交叉编译中的 --sysroot 等等在编译时的作用

--sysroot 的作用

如果在编译时指定了-sysroot就是为编译时指定了逻辑目录。编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前面加上逻辑目录。

如此处我们指定 -sysroot=/home/shell.albert/tools/toolschain_arm/4.4.3/arm-none-linux-gnueabi/sys-root

则如果在编译过程中需要找stdio.h,则会用/usr/include/目录下去找,因为我们指定了系统目录,则会到下面的路径去找。

LD时候的-rpath,-rpath-link 的意思:

-rpath=dir

Add a directory to the runtime library search path. This is used when linking an ELF executable with shared objects. All -rpath arguments are concatenated and passed to the runtime linker, which uses them to locate shared objects at runtime. The -rpath option is also used when locating shared objects which are needed by shared objects explicitly included in the link; see the description of the -rpath-link option. If -rpath is not used when linking an ELF executable, the contents of the environment variable LD_RUN_PATH will be used if it is defined.

-rpath-link=dir

When
using ELF or SunOS, one shared library may require another. This
happens when an ld -shared link includes a shared library as one of the
input files.

When
the linker encounters such a dependency when doing a non-shared,
non-relocatable link, it will automatically try to locate the required
shared library and include it in the link, if it is not included
explicitly. In such a case, the -rpath-link option specifies the first
set of directories to search. The -rpath-link option may specify a
sequence of directory names either by specifying a list of names
separated by colons, or by appearing multiple times.

This
option should be used with caution as it overrides the search path that
may have been hard compiled into a shared library. In such a case it is
possible to use unintentionally a different search path than the
runtime linker would do.

The
difference between -rpath and -rpath-link is that directories specified
by -rpath options are included in the executable and used at runtime,
whereas the -rpath-link option is only effective at link time. Searching
-rpath in this way is only supported by native linkers and cross
linkers which have been configured with the --with-sysroot option
.

-L: “链接”的时候,去找的目录,也就是所有的 -lFOO 选项里的库,都会先从 -L 指定的目录去找,然后是默认的地方。
-rpath: “运行”的时候,去找的目录。运行的时候,要找 .so 文件,会从这个选项里指定的地方去找。对于交叉编译,只有配合 --sysroot 选项才能起作用。
-rpath_link
(或者 -rpath-link):这个也是用于“链接”的时候的,例如你显示指定的需要 FOO.so,但是 FOO.so 本身是需要
BAR.so 的,后者你并没有指定,而是 FOO.so 引用到它,这个时候,会先从 -rpath-link 给的路径里找。

也就是说,-rpath指定的路径会被记录在生成的可执行程序中,用于运行时。
-rpath-link 则只用于链接时。

rpath-link的格式:

./configure --cross-prefix=/home/zhou/android/android_adt/ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot=/home/zhou/android/android_adt/ndk/platforms/android-9/arch-arm --disable-shared --disable-symver --disable-everything --enable-gpl --enable-runtime-cpudetect --enable-decoder=h263 --enable-encoder=h263 --enable-encoder=libx264 --enable-parser=h264 --enable-libx264 --enable-decoder=h264 --prefix=/home/hzh/temp/vpu/build/ffmpeg/ --extra-cflags= -DANDROID -D__thumb__ -mthumb -I../build/x264//include --extra-ldflags= -L../build/x264//lib -Wl,-rpath-link,../build/x264//lib --extra-cxxflags=-Wno-multichar -fno-exceptions -fno-rtti

时间: 2024-11-11 18:19:14

交叉编译中的 --sysroot 等等在编译时的作用的相关文章

java中的异常机制(编译时异常)

/ * 1 异常机制的原理 * 异常是什么:就是错误的另外一种说法; * 在java中,有一个专门模拟所有异常的类,所有的异常都必须继承这个类:Throwable; * 本质是:当程序出错以后,jvm会隐性的创建一个对象,获取错误信息,返回给程序调用处.这个是我们程序员在写程序的时候对某些高风险的操作规定了一个提示机制.我们提示这个机制,相对于系统就是一个处理异常的触发机制 * 异常机制和正常程序机制是两条平行线,一条是我们看到的main()函数里面的调用线.还有一条我们看不见的,如果程序正常情

将子类对象引用赋值给超类对象 JAVA 编译时多态性

将子类对象引用赋值给超类对象 JAVA 编译时多态性(转) (2012-05-10 11:24:05) 转载▼ 标签: 杂谈 分类: 也无晴_soft 1.通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用. DerivedC c2=new DerivedC(); BaseClass a1= c2; //BaseClass 基类,DerivedC是继承自BaseClass的子类 a1.play(); //play()在BaseClass,DerivedC中均有定义,即子类覆写了该方法 分

Java编译时注解自动生成代码

在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解.注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具.可以为特定的注解,注册自己的注解处理器. 一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出.可以生成Java代码,这些生成的Java代码是在生成的.java文件中,所以不能修改已经存在的Java类,例如

Android中使用databinding编译时出现的error:Execution failed for task ':app:dataBindingProcessLayoutsDebug'

Windows环境下使用svn对AndroidStudio更新代码时,总会在源文件中出现一堆乱码,尤其是xml文件中的乱码,不仅找起来费劲,改起来更费劲. 最近从svn更新代码之后,编译时出现了下面这个提示,而且AS中没有错误提示,这可真是捉急了. databinding error:Execution failed for task ':app:dataBindingProcessLayoutsDebug' 后来,多亏这篇帖子提示,自己写了段代码来尝试下,http://stackoverflo

(文档)Shader.Find (在编译时,只包含那些使用中的shader或位置在"Resources"文件夹中shader)

Shader.Find 查找 static function Find (name : string) : Shader Description描述 Finds a shader with the given name. 查找名为name的着色器. Shader.Find can be used to switch to another shader without having to keep a reference to the shader. name is the name you ca

ABS(Android Build System)中在编译时生成源代码文件

编译时经常有的需求是有些.c或者.h文件需要在编译时由某个接口定义文件生成.同时还可能有下面的需求: * 同一个接口定义文件会用于产生多个源文件. * 生成的源文件可能会被其它的Project使用. 举例来说,现在需要从接口定义文件xxx.xml通过可执行文件generator生成源文件xxx_A.h,xxx_B.h和xxx_C.c.命令为: generator A < xxx.xml > xxx_A.h generator B < xxx.xml > xxx_B.h genera

使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中&amp;lt;meta-data&amp;gt;变量的值

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/49247815 文章出自:薛瑄的博客 你也能够查看我的其它同类文章.也会让你有一定的收货 关于使用Gradle来控制版本号和生成不同版本号的代码.我总结了三篇文章,网上关于这些知识,都比較零散.我在学习这些的之前.根本不知道还有这种方法.所以说不知道并不可怕,可怕的是不知道自己不知道.相信这三篇文章,会给你不少灵感 Gradle构建控制Log开关--BuildConfig\自己定义

MVC 4 中编译时,让View 也弹出异常

前言 MVC在编译时,不会提示View中的错误,我们在发布项目的时候会一个一个的提示异常,项目大的时候会非常头疼,因为每次发布都需要至少5分钟,最后收到只有一个异常信息,如果页面异常过多,例如最近整理代码修改了很多底层代码,这样用发布的方式去找异常效率非常低 解决方法 参考网址:http://www.dotnetcurry.com/showarticle.aspx?ID=698 http://haacked.com/archive/2011/05/09/compiling-mvc-views-i

【Note2】用keil对工程编译时,工程中已经包含的文件会报错:cannot open source input file usb_conf.h No such file or directory

错误举例: ..\..\Libraries\STM32_USB-FS-Device_Driver\inc\usb_type.h(21): error:  #5: cannot open source input file "usb_conf.h": No such file or directory 这是因为没有设置 STM32 固件库的目录, 编译器就默认到 "Keil"根目录下的某某目录找去了.如果现在编译程序,会报错的 解决方法:引用固件库文件所在的目录需要在