linker相关内容

Ubuntu、opencv 和链接

我前几天安装了Ubuntu,用apt-get安装了build_essentials、opencv、highgui等.g++是4.6.1,opencv好像是2.1.0..我没有从源码构建opencv.. 我们有一些使用 opencv 功能的软件.让我们假设源文件名为 a.cpp 和 b.cpp.我编译为 a.o 和 b.o,然后将它们放入 .so 库(称为 libab.so). 最后,有 ..
发布时间:2022-01-11 15:34:28 其他开发

我什么时候应该使用 ld 而不是 gcc?

我想知道什么时候应该使用 ld 链接器而不是 gcc.我只是用 C++ 写了一个简单的 hello world,当然我包括 iostream 库.如果我想用 gcc 制作一个二进制文件,我只需使用: g++ hello hello.cpp我有我的二进制文件. 后来我尝试使用 ld 链接器.要获取目标文件,我使用:g++ -c hello.cpp.好的,这很容易,但是链接命令太长了: ..
发布时间:2022-01-11 15:34:02 其他开发

搬迁的概念是什么意思?

我是组装新手,因此想更多地了解搬迁的概念. 为什么我们需要重新定位程序、数据? 具体是怎么做的? 如果有人能用初学者级别的例子来解释,那就太好了. 解决方案 汇编器有一个源文件可以查看.它必须基于该源文件构建内存映像.所以它以 0 开头的代码,也以 0 开头的数据.结果进入目标文件. 现在,链接器出现了,它需要将许多目标文件组合成一个可执行文件(或内核映像,或其他).它 ..
发布时间:2022-01-11 15:33:57 其他开发

强制 Visual Studio 链接 lib 文件中的所有符号

有什么方法可以强制 Visual Studio 将 lib 文件中的所有符号链接到 dll 中,因为 atm 它正在优化程序在运行时使用 dll 所需的“未使用"功能. 我尝试使用/OPT:NOREF 和/OPT:NOICF 但它们似乎不起作用. 我需要它们的原因是因为它们是全局类,它们向控制器注册它们自己,并且它们没有在 dll 中链接. 解决方案 我不知道Visual St ..
发布时间:2022-01-11 15:33:48 C/C++开发

找不到 PDB 'vc100.pdb'

我已经下载了 FreeImage 源代码并自己为 X64 MT DLL 进行了静态构建. 一切正常,除了当我在 freeimage.lib 文件中使用链接时,我收到很多烦人的链接器警告,我不太了解原因? 2>freeimage.lib(zutil.obj):警告 LNK4099:在“freeimage.lib(zutil.obj)"或“\bin\Release\vc100"中找不到 PDB ..
发布时间:2022-01-11 15:33:38 C/C++开发

找不到框架 AudioUnit

我的头撞墙有一段时间了.我的 Xcode 项目在重构时出了点问题,拒绝构建.我已经消除了所有其他错误,除了最后一个链接时间错误: 没有找到框架 AudioUnit 我有 AudioUnit 标头,AudioUnit.framework 像以前一样包含在我的项目中(目标 > 获取信息 > 常规 > 链接库 > + ),但我不知道为什么它现在不起作用.AudioToolbox.framework ..
发布时间:2022-01-11 15:33:28 移动开发

如何使用 libSystem.B 在 XCode 4 中构建 iOS 3.1 部署目标?

我最近从 XCode 3 升级到了 4,现在我的 iPhone 项目出现了构建问题.我需要支持旧版本的 iOS 回到 3.1.使用 XCode 3.2.5,我使用 SDK 4.2 构建没有问题,使用 iOS 部署目标 3.1.我还包含了一个指向 libSystem.B 库的弱链接,这是在旧 iOS 版本上运行应用程序所必需的.现在,当我使用 XCode 4 构建时,出现下面的链接器错误.编译步骤完 ..
发布时间:2022-01-11 15:33:18 移动开发

gcc/ld - 使用来自 glibc.2.6 的 __isoc99_sscanf@@GLIBC_2.7 符号创建一个新的 libc.so

我有一个应用程序,当我尝试运行它时出错: /lib/libc.so.6:未找到版本“GLIBC_2.7" 但它需要的 glibc 2.7 中唯一的符号是 __isoc99_sscanf@@GLIBC_2.7 我想用这个符号作为 __sscanf() 的别名写一个小的单一函数“库" 如何使用 gcc/ld 做到这一点? 我的变体不被接受,因为“@@"符号 int __isoc ..
发布时间:2022-01-11 15:33:12 其他开发

禁止从链接库输出到 cout

我需要将我的 C++ 程序与几个共享库链接起来,这些共享库生成太多的输出到 std::cout 和 std::cerr 使它们都无用我的用途.我可以访问这些库的 C++ 源代码,但不能修改它们. 有没有办法将它们的输出重定向到不同的流或在链接到我的代码时抑制它?我更喜欢 C++ 中的一种干净的方式,但担心那是不可能的,我也会对肮脏的链接器黑客感到满意.作为最后的手段,“代理 libstdc+ ..
发布时间:2022-01-11 15:33:01 服务器开发

__dso_handle 在哪里定义?

我在尝试编译我的程序时遇到一个未解决的符号错误,它抱怨它找不到 __dso_handle.这个函数一般定义在哪个库中? nm on libstdc++.so.6 的以下结果是否意味着它包含该内容? 我试图链接它,但仍然出现错误. nm libstdc++.so.6 |grep dso00000000002fc480 d __dso_handle 解决方案 __dso_handle ..
发布时间:2022-01-11 15:32:48 其他开发

静态库,但我仍然需要标题?

我有一堆项目,它们都可以共享一个“通用"静态类库. 让我感到困惑的是,如果我从这些类中创建一个静态库并在我的项目中链接它,我仍然需要在我的主要项目中静态库中的类的标题. 那么静态库有什么好处呢? 像 Adob​​e 这样的公司如何处理这个问题? 解决方案 静态库允许您创建一个库并在许多项目中使用该库. 需要头文件: 由于使用库的项目是独立于库进行编程和编译的, ..
发布时间:2022-01-11 15:32:41 C/C++开发

.LIB 和 .OBJ 文件有什么区别?(Visual Studio C++)

我知道 .OBJ 是编译一个编译单元的结果,.LIB 是一个静态库,可以从几个 .OBJ 创建,但这种区别似乎只在编译单元的数量上.还有其他区别吗?是相同还是不同的文件格式? 当我想知道在两个(或更多).LIB 中定义的相同静态变量是否在链接到最终可执行文件期间被合并时,我遇到了这个问题.对于 .OBJ,变量被合并.但在 .LIB 中是否也一样? 解决方案 .LIB 文件是与索引连接 ..

elf 文件中各节的虚拟地址和物理地址

objdump 如何计算 elf 段的物理地址 (LMA)?据我所知,elf 节标题仅包含节 [1] 的虚拟地址 (VMA). 通常,VMA 和 LMA 是相同的.但对于初始化数据段 (.data),VMA 是变量的 RAM 位置,LMA 是初始值所在的 ROM 位置.Crt0 负责在调用 main() 之前将初始值复制到 RAM 中.例如: $ objdump -h my.elf部分:I ..
发布时间:2022-01-11 15:32:08 其他开发

构建一个使用 ld 选项 -rpath 和 $ORIGIN 的简单(hello-world-esque)示例

注意:下面是完整的工作示例.原始问题如下: 我在使用带有 $ORIGIN 的 ld 的 -rpath 参数时遇到问题. 由于找不到完整的示例,我想我会尝试自己写一个,以便我和其他人以后可以使用它.一旦我得到它的工作,我会整理它. 我之前问过这个问题,但是我觉得我的帖子有点混乱. 示例项目构建了一个共享库和一个链接到该库的可执行文件. 它非常小(3 个文件,22 行,包括构建脚 ..
发布时间:2022-01-11 15:31:52 服务器开发

gcc 链接器映射文件用于什么?

gcc/g++ 链接器选项“-Map"生成的“.map"文件有哪些用途?以及如何阅读它们? 解决方案 我建议为您投入生产的任何软件生成一个地图文件并保留一份副本. 它对于破译崩溃报告很有用.根据系统的不同,您可能会从崩溃中获得堆栈转储.堆栈转储将包括内存地址,其中一个寄存器将包括指令指针.这告诉你内存地址代码正在执行.在某些系统上,代码地址可以移动(加载动态库时,因此是动态的),但低 ..
发布时间:2022-01-11 15:31:33 其他开发

如何强制使用本地共享库而不是系统库?

如何在 linux 中强制使用本地库而不是系统库? 我将我的可执行文件显式链接到我的项目/lib 目录中的一些 .so 文件,例如(../lib/libluajit.so). 在 gdb 下运行我的可执行文件或使用 ldd 显示它仍然使用系统 libluajit-5.1.so.2 然后我将 LD_LIBRARY_PATH 设置为我的项目/lib 目录并将其导出,然后运行我的可执行 ..
发布时间:2022-01-11 15:31:12 服务器开发

链接时gcc可以使用多个内核吗?

因此,当使用 GCC 编译大量源文件时,可以使用 -j 来使用所有可用的内核.但是链接器呢?是否有类似的选项可以加快链接速度,或者 GCC 不支持多线程?在一些较大的项目中,这确实需要一段时间......(......我讨厌等待!) 编辑:感谢您指出 -j 是 make 而不是 gcc/g++ 的选项.但这并不能回答我的问题!我想知道gcc是否可以在链接一个程序时使用多线程! 解决方案 ..
发布时间:2022-01-11 15:30:55 其他开发