首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么添加"-Wl,-static -lmy_static_lib“会影响库搜索路径?

添加"-Wl,-static -lmy_static_lib"会影响库搜索路径的原因是因为这个参数告诉链接器在链接时使用静态库(即my_static_lib),而不是动态库。静态库是在编译时将库的代码和数据直接嵌入到可执行文件中,因此在运行时不需要额外的库文件。而动态库是在运行时加载的,需要通过库搜索路径来找到对应的库文件。

当使用"-Wl,-static -lmy_static_lib"参数时,链接器会优先搜索静态库,如果找到了对应的静态库文件,就会使用静态库进行链接,而不再搜索动态库。这样就会忽略掉默认的库搜索路径,可能导致其他依赖库无法被正确链接。

如果希望同时搜索静态库和动态库,可以使用"-Wl,-Bstatic -lmy_static_lib"参数。这样链接器会先搜索静态库,如果找到则使用静态库进行链接,如果没有找到静态库,则会继续搜索动态库。

总结起来,添加"-Wl,-static -lmy_static_lib"参数会影响库搜索路径,因为链接器会优先搜索静态库,可能导致其他依赖库无法被正确链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CC++生态工具链——gccg++编译器使用指南

GCC在链接时优先使用动态,只有当动态不存在时才开始使用静态,如果要强制使用静态,编译时加上-static参数。 使用-Wl,-Bstatic告诉链接器优先使用静态。...编译目标代码时指定的动态搜索路径 2. gcc的环境变量LD_LIBRARY_PATH 3. 配置文件/etc/ld.so.conf中指定的动态搜索路径 4. 默认的动态搜索路径/lib 5....-l[basic library] #编译时指定要使用的基础,样例:-lpthread,针对Posix线程共享进行编译 -L[shared-library path] #共享路径添加搜索的范围...,路径为包含xxx.dll/xxx.so/xxx.dlyb文件的目录 -I[include header-file path] #将头文件的路径添加搜索的范围,路径为包含xxx.h.../xxx.hpp文件的目录 -shared #生成共享文件格式为xxx.dll/xxx.so/xxx.dlyb格式的文件 -static #生成静态文件格式为xxx.a格式的文件 -Wl

2.5K30
  • Linux下动态链接加载路径搜索路径问题

    ld.so 动态共享搜索顺序 1、ELF可执行文件中动态段DT_RPATH指定;gcc加入链接参数“-Wl,-rpath”指定动态搜索路径; 2、环境变量LD_LIBRARY_PATH指定路径;...如:nm /lib/libc*.so Linux 下动态链接搜索路径问题 Linux动态链接搜索路径按优先级排序为: 1.编译目标代码时指定的动态搜索路径; 在编译时通过gcc 的参数”-Wl,...添加完配置文件后执行ldconfig使其生效。...4、其它情况,如果只想对某一个特定的应用程序起作用的话,可以在编译时指定搜索路径。gcc 的 -Wl 和 -rpath 参数。...总结 以上所述是小编给大家介绍的Linux下动态链接加载路径搜索路径问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

    10.2K63

    linux下的so、o、lo、a、la文件的区别

    o: 编译的目标文件 a: 静态,其实就是把若干o文件打了个包 so: 动态链接(共享) lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息 la: 使用libtool编译出的文件...,只是在这个时候根据相应的规则生成相应的共享和静态。...说“可能”,是因为如果在本地编译的情况下,gcc在命令行中找不到一个(比如上面的liba.so)依赖的其它(比如libb.so),链接器按照某种策略到某些路径下面去寻找需要的共享: 1....所有由’-rpath-link’选项指定的搜索路径. 2. 所有由’-rpath’指定的搜索路径....这两个选项在上述八种策略当中优先级最高,当指定这两个选项时,如果链接需要的共享找不到,链接器优先到这两个选项指定的路径下去搜索需要的共享

    8.9K30

    Linux编译相关命令

    (4)-static 此选项将禁止使用动态。...优点:程序运行不依赖于其他 缺点:文件比较大 gcc test_main.c -static -o test_main -lpthread 会发现test_main...3、如何解决运行时找不到动态的问题 (1)将动态添加到系统默认的搜索路径下,如/lib、/usr/lib (2)设置临时动态路径的环境变量,这种方法设置的是临时的,系统重启之后就没了...,可以通过修改配置文件/etc/ld.so.conf中指定的动态搜索路径,然后执行ldconfig命令来改变 (4)编译链接添加-WL,-rpath命令选项,将运行时动态搜索路径记录在可执行程序中...找不到 g++ main.cpp -o a.out -L ./ -lfunc -WL,-rpath ./ 编译得到a.out,执行a.out,运行成功,ldd查看a.out依赖的动态

    3.4K00

    Linux gcc链接动态出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别

    很遗憾ld链接器报了如上的错误,但是如果在上面的gcc命令中添加上-L /root/gcc_test/tcp_msg/lib/参数,即明确动态的绝对路径,是能够链接成功的。...4.1 Linux gcc编译链接时的动态搜索路径 GCC编译、链接生成可执行文件时,动态搜索路径就包含LIBRARY_PATH,具体的搜索路径顺序如下(注意不会递归性地在其子目录下搜索): 1、...4.2 执行二进制文件时的动态搜索路径 链接生成二进制可执行文件后,运行该程序加载动态文件时就会搜索包含LD_LIBRARY_PATH路径下的动态,具体顺序如下: 1、编译目标代码时指定的动态搜索路径...:用选项-Wl,rpath和include指定的动态搜索路径,比如gcc -Wl,-rpath,include -L....-ldltest hello.c,在执行文件时会搜索路径`.

    73810

    静态(.a)与动态(.so)的简明介绍

    d libmod.a mod2.o删除一个不需要的目标文件 打包好后就可以用libmod.a代替一串目标文件了: $ gcc -o resultant main.c libmod.a 最常用的链接静态的方式是添加.../resultant print_mod1 print_mod2 -Lpath把指定路径加入链接器搜索路径,这里我们把当前目录(.)加入,自然就能找到libmod.a了。...动态搜索顺序如下 编译目标代码时指定的动态搜索路径; 环境变量LD_LIBRARY_PATH指定动态搜索路径,它指定程序动态链接文件搜索路径;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH...:data/home/billchen/lib 配置文件/etc/ld.so.conf中指定的动态搜索路径; 默认的动态搜索路径/lib; 默认的动态搜索路径/usr/lib。.../resultant print_mod1 print_mod2 动态别名(-Wl,-soname,xx) 这里再说说-Wl,-soname,该选择告知链接器一个动态的别名

    1.6K50

    Linux下so动态一些不为人知的秘密

    Linux 下有动态和静态,动态以.so为扩展名,静态以.a为扩展名。二者都使用广泛。本文主要讲动态方面知识。 链接了冗余的怎样?...所以必定会影响进程启动速度,所以我们最后不要把无用的so编译进来,这里会有什么影响呢?...使用 -Wl,--as-needed 编译选项 ? 呵呵,办法很简单省事吧,本文主要讲so依赖的一些问题,下面将介绍so的路径方面一些不为人知的小秘密。...所以应该禁止使用绝对路径链接so。 搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径。...像前面提到的 -L/tmp/是属于链接时期的搜索路径,即给ld程序提供的编译链接时候寻找动态路径;而LD_LIBRARY_PATH则既属于链接期搜索路径,又属于运行时期的搜索路径

    4.1K20

    详解共享的动态加载

    因此,我们需要让我们clang知道在哪里搜索共享。我们用-L参数来做到这一点。请注意,由指定的路径-L仅在链接时影响搜索路径,而不会在运行时影响。...好的, 我们已经知道main依赖于librandom.so, 那么,为什么在运行时main找不到librandom.so ? 运行时搜索路径 ldd是一个工具,使我们可以查看递归共享的依赖关系。...难怪找不到我们的共享-所在目录librandom.so不在搜索路径中!解决此问题的最特别的方法是使用LD_LIBRARY_PATH: $ LD_LIBRARY_PATH=. ....找出使用来搜索依赖项的位置LD_DEBUG=libs ldd ; 如果您需要在搜索添加目录: 临时:将目录添加到LD_LIBRARY_PATH环境变量 嵌入文件中:将目录添加到可执行文件或共享的目录中...使用$ORIGIN相对于可执行文件的路径。 如果ldd显示没有依赖项丢失,请查看您的应用程序是否具有提升的特权。如果是这样,ldd可能撒谎。请参阅上面的安全问题。

    3.1K20

    CMake和静态顺序

    前言 C/C++程序的许多同学被静态的依赖折腾,因为默认情况下要求被依赖的放在依赖它的后面,当一个程序或共享依赖的静态较多时,可能陷入解决链接问题的坑中。...另外,在编译libb.a时是不指定liba.a的,因为编译一个静态不会使用到链接选项,而只需要指定需要依赖的头文件路径即可。...链接时指定共享搜索路径(类似于设置LD_LIBRARY_PATH): -Wl,-rpath=/usr/local/abc:/data/abc 以上也可以分开写: -Wl,-rpath=/usr/local.../abc -Wl,-rpath=/data/abc 部分库链接它的静态,部分库链接它的共享: -Wl,-static -lb -Wl,-call_shared -la -lz 指定链接器: -Wl,...,-soname=libqhttpd.so -rpath 增加共享搜索路径 --retain-symbols-file表示不丢弃未定义的符号和需要重定位的符号 --export-dynamic 创建一个动态连接的可执行程序时

    6.7K50

    Apache配置压缩优化时报错——undefined symbol: inflateEnd

    2、我百度了inflateEnd,第一个就是搜索条目就是zlib的百度百科,然后我就去google搜索inflateEnd,搜索条目告诉我inflateEnd是属于zlib.lib文件里面的。...有时候LDFLAGS指定-L虽然能让链接器找到进行链接,但是运行时链接器却找不到这个,如果要让软件运行时文件的路径也得到扩展,那么我们需要增加这两个给"-Wl,R": LDFLAGS = -L/...var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib 如果在执行..../configure以前设置环境变量export LDFLAGS="-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib...那么执行configure以后,Makefile将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的文件搜索路径就得到扩展了。

    69710

    详解Android studio ndk配置cmake开发native C

    add_library( # 括号不在这一行语法错误 # 的名字自定义的 PNG # static 就是a文件,shared 就是so文件 STATIC # 这里提供的是预编译好的文件...路径是相对于当前文件的 # 正确设置了这个路径,在IDE中代码头文件也正确索引。否则会无法定位头文件。...# 因为并不打算把PNG这个单独载入,平台也不一定有这个, # 于是就整体复制到NativeLib.so里面 "-Wl,--whole-archive" PNG "-Wl,--no-whole-archive...android EGL GLESv2 log z ) 那么编译出来的文件在为什么位置呢,如下: ? 系统生成apk的时候,自动安装进去。...就是让NativeLib编译为STATIC的,然后在Development target_link_libraries的时候使用”-Wl,–whole-archive”完全把NativeLib的a文件合并到

    2.3K51

    从程序员角度看ELF

    对于每一个,链接器在以下位置搜索:   ● 是否dynamic段有一个称为DT_RPATH的表项,它是由分号分隔开的可以搜索的目录列表。   ...它可以通过一个命令行参数或者在程序链接时常规(非动态)链接器的环境变量来添加。...如果要查找的   名称存在于其中,则采用文件中相应的路径。...大多数都通过这种方法被找到(路径末尾的   文件名称并不需要和所搜索名称精确匹配,详细请参看下面的版本章节)。   ...为了保持加载程序合理的速度,系统设法维护一个缓冲文件,保存最近用过的每一   个的全路径文件名,该文件会在一个新被安装时有一个配置管理程序来更新。

    99240
    领券