linker相关内容

提升测试链接

我想在我的项目中使用 Boost 测试. 我在我的项目中使用了 cmake,所以我写了一个简单的 CMakeList.txt 来包装它: find_package (Boost COMPONENTS unit_test_framework REQUIRED)文件(GLOB_RECURSE UnitTests_sources 测试/*.cpp)add_executable(单元测试${Uni ..
发布时间:2022-01-11 15:47:32 C/C++开发

为什么在使用 -rpath 时需要 -L?

我发现在使用-rpath时必须要给出-L标志.例如: gcc -o test test.o -L.-lmylib -Wl,-rpath=. 为什么需要 -L 标志?编译时,除了来自 h 文件的信息之外,还需要什么信息? 如果我删除 -L.我收到以下消息: gcc -o test test.o -lmylib -Wl,-rpath=./usr/bin/ld: 找不到 -lmyLib 不 ..
发布时间:2022-01-11 15:47:18 其他开发

nm:“U";符号未定义

当我在我的一个库上运行时: nm libmylib.so 我得到这样的一条线 U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 我检查了 nm 的手册页,我得到“U"符号未定义.未定义符号的真正含义是什么? 如果真的是未定义的,那为什么nm会报告呢? 解决方案 未定义符号是库使用但未在创建库的任何目标文件中定义的符号. ..
发布时间:2022-01-11 15:47:01 C/C++开发

如何手动创建可执行的 .exe PE 文件?

在解释词法分析器和解析器之后,所有关于如何创建编译器的文本都停止了.他们没有解释如何创建机器代码.我想了解端到端的流程. 目前我的理解是,Windows exe 文件格式被称为 Portable Executable.我阅读了它的标题,但尚未找到可以轻松解释这一点的资源. 我的下一个问题是,我没有看到任何解释机器代码如何存储在文件中的资源.是不是像 .text 段中一个接一个的存储 3 ..

如何以图形方式显示 .map 文件中的内存布局?

我的 gcc 构建工具链生成一个 .map 文件.如何以图形方式显示内存映射? 解决方案 这是 Python 脚本的开始.它将地图文件加载到部分和符号列表(前半部分)中.然后它使用 HTML 渲染地图(或使用 sections 和 symbols 列表做任何你想做的事情). 您可以通过修改这些行来控制脚本: with open('t.map') as f:颜色 = ['9C9F84 ..
发布时间:2022-01-11 15:46:35 C/C++开发

C++:链接库和添加包含目录之间的区别

很多标题都概括了. 如果我想使用库,我不确定两者之间的区别. 谢谢! 解决方案 一般来说,两者都需要. 包含文件包含类型的声明、函数的原型、inline 函数、#defines、...,通常是所有信息关于编译器在编译文件时需要注意的库. 相反,静态库包含库函数的实际目标代码.如果标头包含原型,则静态库包含(编译的)函数的定义,即链接器将与您的链接器链接的对象模块. ..
发布时间:2022-01-11 15:46:27 C/C++开发

`-rpath-link` 和 `-L` 有什么区别?

gold 的人说: -L DIR, --library-path DIR将目录添加到搜索路径--rpath-link 目录将 DIR 添加到链接时间共享库搜索路径 bfd ld 的 man 听起来有点像 -rpath-link 用于递归包含的 sos. ld.lld 甚至没有将其列为参数. 有人可以帮我澄清一下这种情况吗? 解决方案 这里有一个demo,对于GNU ld, ..
发布时间:2022-01-11 15:46:19 其他开发

每个进程的内核虚拟内存包含什么?

当 3 个程序(可执行文件)加载到内存中时,布局可能如下所示: 替代文字 http://img97.imageshack.us/img97/3460/processesm.jpg 我有以下问题: 虚拟内存的概念是否仅限于用户进程?因为,我想知道操作系统内核、驱动程序在哪里?它的内存布局如何?我想了解更多关于内核端内存的信息.我知道它的操作系统特定于你的选择(windows/lin ..
发布时间:2022-01-11 15:46:10 其他开发

Eclipse 中的编译器标志

我的构建要求我发出以下命令: $ g++ sniff.cpp -o sniff -lcrafter 但是,在我的 Eclipse 构建中,编译器得到的只是: g++ -o "sniffer_crafter" ./src/sniffer_crafter.o 收到这些命令后,它抱怨我有一个未定义的对库 Crafter 的引用. 如何使用 Eclipse 解决此链接问题?我见过其他人对类似 ..
发布时间:2022-01-11 15:45:51 Java开发

fedora 上的 gcc 链接器错误:未定义的引用

我正在尝试在 Fedora/gcc 上编译/运行我的程序(在 Windows/MSVC 上运行良好).编译现在很好,链接似乎是个问题.根据症状和这篇文章 undefined reference to `__gxx_personality_sj0,在我看来问题可能是编译器/链接器架构类型不匹配.反正我不是专家所以 我刚刚卸载了我使用 yum list | 找到的所有内容egrep gcc|g+ ..
发布时间:2022-01-11 15:45:45 C/C++开发

CMake:根据操作系统和架构链接预编译库

我有不同的第 3 方库(Windows/Linux/Mac,32/64 位)的预编译版本.它必须包含在项目文件中,以将其他系统上的编译要求保持在最低限度,因为我不能指望它在多年后可供下载.静态和动态版本都可用,但没有来源. 我应该如何在我的 CMakeLists.txt 中链接它,以便依赖的 main.cpp 在所有系统上编译?它可以在不同的 Linux 发行版上运行吗? CMAKE_MI ..
发布时间:2022-01-11 15:45:21 其他开发

有没有办法在链接时覆盖 -fvisibility=hidden ?

我们正在使用第三方静态库,比如说 A.a 用于 android 开发.我们将其链接为共享库,它在一个 App 中运行良好,但是当使用 B.so 构建另一个 C.so 时,Aa 找不到.我们已经使用 -Wl,--export-dynamic 和 -Wl,--whole-archive 来构建 B.so.我们已经使用nm来检查那些符号,它存在但列为“t"而不是“T",这意味着它是本地符号而不是外部.A ..
发布时间:2022-01-11 15:45:12 移动开发

如何使用ld手动运行生成elf可执行文件?

我试图弄清楚在生成可执行文件时链接过程是如何工作的.为此,我正在阅读 Ian Taylor 的博客系列,但很多目前它超出了我的范围 - 所以我想看看它在实践中是如何工作的. 目前我生成了一些目标文件并通过 gcc 链接它们: gcc -m32 -o test.o -c test.cgcc -m32 -o main.o -c main.cgcc -m32 -o 测试 main.o test. ..
发布时间:2022-01-11 15:44:56 其他开发

对“dlopen"的未定义引用

我有一个不使用现代 GCC 构建的程序,输出很愚蠢: gcc -I/usr/lib/qt3/include -I/opt/kde3/include/-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -lqt-mt -ldl ..
发布时间:2022-01-11 15:44:49 服务器开发

c - 将启用 PGI OpenACC 的库与 gcc 链接

简而言之,我的问题依赖于使用两个不同的编译器编译/构建文件(使用库),同时利用源文件中的 OpenACC 结构. 我有一个具有 OpenACC 结构的 C 源文件.它只有一个简单的函数来计算数组的总和: #include #include #include 双计算总和(int n,双 *a){双倍总和 = 0;诠释我;printf ..
发布时间:2022-01-11 15:44:43 其他开发