草庐IT

LD_HWCAP_MASK

全部标签

Linux:控制 `ld` 在何处搜索 .o 目标文件?

好的,情况是这样的:我正在尝试使用一些较旧的软件:在UbuntuLucid上运行良好,在Natty上运行失败。所以,我strace搜索了一下,发现这个软件调用了ld,而ld最终失败了:.../ld:crt1.o:Nosuchfile:Nosuchfileordirectory...是的,旧的crti.ofilemissing错误:)但是,我想用更笼统的术语来问这个问题......问题是,这是“独立的”(较旧的)ld,当我运行.../ld-verbose|更少,我得到:...SEARCH_DIR("/usr/local/lib");SEARCH_DIR("/lib");SEARCH_DI

c - `bash: ./a.out: No such file or directory` 运行由 `ld` 生成的可执行文件

这是C语言的HelloWorld代码://a.c#includeintmain(){printf("Helloworld\n");return0;}我将其编译为gcca.c,它按预期生成a.out并且./a.out打印Helloworld...正如预期的那样。现在,如果我分别进行编译和链接:gcc-ca.c;ld-lca.o,它运行生成为./a.out的a.out我收到消息:bash:./a.out:Nosuchfileordirectory我用Google搜索了那个错误,似乎当生成的可执行文件是32位ELF而机器架构是64位时会发生这种情况。我正在运行64位机器并运行filea.ou

linux - LD_LIBRARY_PATH : how to find a shared object

我有一个共享对象(libxyz.so)。给定LD_LIBRARY_PATH,如何找到这个共享对象的确切位置?如果我有一个依赖于这个库的二进制文件,我会在上面使用ldd。这就是我问的原因:我有一个cgi脚本,它在使用LD_LIBRARY_PATH设置为VALUE1时有效。当路径设置为VALUE2时,它不起作用。我想找到VALUE1中路径指定的库的确切位置(请注意,VALUE1有近20多个不同的位置)平台:Linux 最佳答案 将其放入文件中:#!/bin/bashIFS=:forpin${LD_LIBRARY_PATH};doif[-

linux - LD_LIBRARY_PATH 副作用

我对更改LD_LIBRARY_PATH有奇怪的副作用。当我附加一个包含库的路径时,例如:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib然后,一切都变得令人难以置信的缓慢。例如,一个简单的ls可以是10秒长。ldd输出在LD_LIBRARY_PATH更改前后完全相同,我尝试使用调试慢速ls的执行>strace:我在这两种情况下得到完全相同的执行。在执行ls期间,执行甚至不会卡住(因为strace在10秒的滞后期间没有输出任何内容,然后突然完美地执行ls)。所以我认为它可能来self的shell,但这是相同的,在我的bash上运行strace并在

sql - 设置LD_BIND_NOW变量解决TNS Linux Error : 29: Illegal seek error

在我的Linux机器上使用bashshell为我的OracleXEDB启动TNS监听器时我遇到了问题:LSNRCTL>startStarting/oracle/product/11.2.0/xe/bin/tnslsnr:pleasewait...TNS-12537:TNS:connectionclosedTNS-12560:TNS:protocoladaptererrorTNS-00507:ConnectionclosedLinuxError:29:IllegalseekLSNRCTL>exit我尝试了很多在互联网上给出的不同解决方案,最后在引用帖子后问题得到解决-https://db

c - 如何使用 LD_PRELOAD 检查是否已预加载 linux 共享库

我熟悉使用dlopen()检查共享库是否已加载到进程中,使用之前调用dlopen()而不触发加载如果它不存在,像这样:void*lib=dlopen(lib_name,RTLD_NOLOAD);if(lib!=NULL){...}我最近尝试应用相同的模式来确定少数共享库中的一个是否已使用LD_PRELOAD加载到进程空间中。但是在所有情况下,上述对dlopen()的调用都会返回NULL。基本上,如果我使用此命令行启动进程LD_PRELOAD=libawesome.so./mycoolprocess然后在mycoolprocess.c中的代码中运行如下检查void*has_awesome

linux - 在多架构设置中使用/etc/ld.so.preload

有什么方法可以使用ld.so.preload并覆盖32位和64位二进制文​​件吗?如果我在ld.so.preload中列出故障处理程序的32位和64位版本,那么加载程序总是提示其中一个无法为我运行的任何命令进行预加载。不完全是惊天动地,因为错误更像是一个警告,但我当然可以不打印输出。我没有指定绝对路径,而是尝试简单地指定“segv_handler.so”,希望加载程序会选择arch适当路径中的lib(32位版本在/lib中,64位版本在/lib64中).显然不太可能。有没有办法将ld.so.preload设置为架构感知?或者,如果没有,是否有某种方法可以关闭错误消息?

linux - ld 不链接 Linux 上的 OpenGL

gcc-lGL-lGLU-lglutlight.c/tmp/ccfuthSi.o:Infunction`init':light.c:(.text+0x72):undefinedreferenceto`glClearColor'light.c:(.text+0x7e):undefinedreferenceto`glShadeModel'light.c:(.text+0x99):undefinedreferenceto`glMaterialfv'light.c:(.text+0xb4):undefinedreferenceto`glMaterialfv'light.c:(.text+0xc

Linux、GNU GCC、ld、版本脚本和 ELF 二进制格式——它是如何工作的?

我正在努力了解更多关于Linux中的库版本控制以及如何将其全部投入使用的信息。这是上下文:--我有两个版本的动态库,它们公开了同一组接口(interface),比如libsome1.so和libsome2.so。--应用程序链接到libsome1.so。--此应用程序使用libdl.so动态加载另一个模块,比如libmagic.so。--现在libmagic.so链接到libsome2.so。显然,如果不使用链接器脚本隐藏libmagic.so中的符号,在运行时所有对libsome2.so中接口(interface)的调用都将解析为libsome1.so。这可以通过检查libVersi

c - 黑白 llvm-ld 和 llvm-link 的区别

llvm-ld和llvm-link有什么区别?我想llvm-ld会执行链接时间优化,而llvm-link不会。我说得对吗? 最佳答案 llvm-ld是支持LLVM位码和native代码的系统链接器的直接替代品。它默认生成位码可执行文件(即生成的可执行文件调用位码解释器),但也可用于生成native可执行文件。我不直接使用llvm-ld因为使用llvmc和clang前端会更方便,它们会调用适当的程序根据需要添加LLVM工具链(注意:llvmc被标记为实验性的,似乎已在3.0版本中删除)。llvm-link是一个更底层的工具,它将多个位