ld相关内容
可执行文件似乎无法解析链接库中的符号. LD_DEBUG = libs的相关输出显示正确的库已加载: 6557: /usr/lib/libcharon.so.0: error: symbol lookup error: undefined symbol: auth_class_names (fatal) /usr/libexec/ipsec/charon: symbol lookup error:
..
我制作了一个非常简单的1级引导加载程序,它执行两个主要任务:它从16位实模式切换到64位长模式,并且从硬盘读取接下来的几个用于启动基本内核的扇区. /p> 对于基本内核,我试图用C而不是汇编语言编写代码,对此我有一些疑问: 我应该如何编译和链接nasm文件和C文件? 编译文件时,应该编译为16位还是64位?因为我从16位切换到64位. 我如何将C或程序集中的更多文件添加到项目中?
..
就像这个问题说的那样:我们正在使用GNU链接器在Linux上构建,而在Solaris中使用solaris ld进行构建. GNU ld支持--export-dynamic标志,该标志: 创建动态链接的可执行文件时,请将所有符号添加到动态文件中 符号表.动态符号表是可见的符号集 在运行时从动态对象中删除. 使用solaris链接器等效于此标志是什么? 有吗? 解决方案 默认情况下
..
一些背景知识:我正在尝试为嵌入式传感器系统构建AVR二进制文件,并且我的运行接近极限.我使用一些外部库来帮助我,但是当每个库编译成一个对象时,它们很大.我想将它们放入较小的对象中,以便仅将我需要的功能链接到程序中.我已经设法通过拆分一个大的库将二进制文件大小减少了2k. 知道在游戏的每个阶段都在使用哪些对象会很有帮助,因此我可以更有效地拆分它们.有没有办法让ld打印它链接的对象? 解决
..
/usr/bin/ld: i386:x86-64 architecture of input file `build/gengenrtl.o' is incompatible with i386 output /usr/bin/ld: i386:x86-64 architecture of input file `build/errors.o' is incompatible with i386
..
在Linux中,我有一个共享库,该库使用pthreads,而main.c不使用. libpthread.so显示在我的共享库的一小部分中,这是正确的. $ ldd libmapreduce.so.1.0 linux-gate.so.1 => (0x0067d000) libpthread.so.0 => /lib/libpthread.so.0 (0x0058c00
..
为了节省空间,是否可以在Linux上共享可执行页面?我知道有些共享内存API可用于在不同进程之间共享内存,但我认为这并不是用于此目的的. 基本上,我希望有一个共享内存区域,可以将一些常用的共享库加载到其中.我想让动态链接器链接到预加载的(只读)图像,而不是必须将所有共享库图像加载到每个进程中(这看起来很浪费). 在Linux内核上可能吗?达尔文内核使用称为 commpages 的Mac
..
清除警告,可以看到以下内容: ld: warning: directory not found for option '-F/myPath/etc/myframework' 这是在非标准iOS框架中发生的.如何消除警告? 解决方案 检查链接器ld的手册页会显示-Fdir选项的以下详细信息: 将dir添加到要在其中搜索框架的目录列表. 在目录中搜索用-F指定的目录. 顺序将它
..
因此,我有这个汇编文件,我将其与GNU一起汇编并使用链接程序脚本与GNU ld链接. 链接描述文件(boot.ld): INPUT(boot.o) OUTPUT(boot.out) ENTRY(boot_start) SECTIONS { . = 0x7c00; .text : { *(.text) } .data : { *(.dat
..
我有一个共享库(so)对象,该对象公开了C API(extern "C").它不使用API中的C ++,也不抛出异常.在内部,它确实使用C ++,尤其是std::map和其他容器,以及一些琐碎的模板. 我的目标是能够将该库提供给Unix中的任何程序(我为每个目标linux发行版编译多个版本),而不会导致加载程序(例如,用即使它是用其他版本的标准库编译的也应该可以正常工作. 这是我通
..
我正在x86-64上为macOS编写编译器,但是当我将目标文件链接在一起时,ld说 ld: dynamic main executables must link with libSystem.dylib for inferred architecture x86_64 但是由于libSystem包含libc,所以我不想使用它(它会给我很多重复项).我该如何解决? 解决方案 使用-
..
我们有一个库和一个可执行文件,该文件将被静态链接到库.我们希望最小化最终可执行文件的程序空间. 根据avr-libc的文档: 该功能所在的整个对象模块中的链接器链接 另一方面,我的同事们一致认为,链接器会丢弃一些未使用的功能. 那么谁是正确的,或者我误会了什么?在整个gcc中答案是一致的吗?还是我们在这里只说avr端口? 解决方案 除非您告知,否则它不会执行无效代码
..
在构建静态库并将其与其他代码链接到可执行文件时,我有一个CMake项目.由于我不愿讨论的原因,我希望使用--whole-archive链接器标志进行此链接. 现在,此标志非常棘手,因为您不能仅将其添加到任何地方-您必须对其进行切换,然后列出要对其应用的库,然后取消对其进行切换. 我已经读到某个地方(URL逃脱了我),如果您已有一个预先存在的库,则可以通过执行以下操作来有效地添加此链接器
..
我一直在阅读部分文档ld 并不清楚. 给出部分链接脚本: MEMORY { FLASH1 (rx) : ORIGIN = 0x000FB000, LENGTH = 0x05000 FLASH2 (r) : ORIGIN = 0x000FA000, LENGTH = 0x01000 } SECTIONS { .some_code : { KEEP(*(SORT(
..
默认情况下,GCC使用4字节的wchar_t.我可以将选项-fshort-wchar设置为在L"string constants"中每个wchar_t获得2个字节.但是,当我将编译器选项设置为源文件时,会收到著名的警告消息 foo.o使用2字节wchar_t,但输出将使用4字节wchar_t.在对象之间使用wchar_t值可能会失败 因为我真的想要2字节wchar_t,所以我也希望输出
..
我正在使用Qmake在Ubuntu 9.10上构建共享库 此共享库(A)依赖于另一个共享库(B). 项目B已成功构建. 在项目A的.pro文件中,我的LIBS变量如下所示: LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0 (我使用了完整的shlib名称,因为库的版本不同.) 无论如何,当我尝试构建项目A
..
我有一个包含一些静态初始化代码的库,需要在main()之前运行.如果您只将所有翻译单元一起编译,那么一切都很好,但是如果我提供了一个静态库(.a文件)并让用户将其应用程序链接到它,则它不起作用-链接器只是忽略了这样做的符号我的静态初始化. 或者,如果我为GCC指定了-Wl,--whole-archive选项,即为GNU链接指定了--whole-archive选项,则可以使链接程序在静态库中提
..
我在这里使用的软件包是一个未知数,但是尽管如此,这个问题还是很普遍的.基本上,我正在尝试编译具有C ++扩展名的Python模块(称为rql).该扩展使用名为gecode的外部框架,该框架包含多个库.我编译了gecode并在本地安装.现在,让输出说明一切: red@devel:~/build/rql-0.23.3$ echo $LD_LIBRARY_PATH /home/red/usr/li
..
在QtCreator中构建几个不同的项目时,我遇到了以下构建错误: collect2: ld returned 1 exit status 仅更改了几处内容(不应更改构建中的重要内容)之后,如果它已经出现,则将消失,或者如果不存在,它将消失. 在我当前用于学校项目的程序中,我正在尝试编译rock03.cpp.它是构建中的唯一文件,并且具有main()方法.我刚刚成功运行它,然后又返
..
我用librtmp构建ffmpeg.我的librtmp位于/opt/librtmp/lib.当我执行ffmpeg时,它说: ./ffmpeg: error while loading shared libraries: librtmp.so.0: cannot open shared object file: No such file or directory 我使用ldd命令,它显示未
..