linker相关内容
我想在我的项目中使用 Boost 测试. 我在我的项目中使用了 cmake,所以我写了一个简单的 CMakeList.txt 来包装它: find_package (Boost COMPONENTS unit_test_framework REQUIRED)文件(GLOB_RECURSE UnitTests_sources 测试/*.cpp)add_executable(单元测试${Uni
..
我正在尝试更深入地了解链接过程和链接器脚本...查看 binutils 文档,我发现了一个简单的链接器脚本实现,我通过添加一些命令对其进行了改进: OUTPUT_FORMAT("elf32-i386", "elf32-i386",“elf32-i386")OUTPUT_ARCH(i386)条目(我的主)部分{.= 0x10000;.text : { *(.text) }.= 0x8000000;
..
我发现在使用-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 不
..
运行时: sudo/sbin/ldconfig 出现如下错误: /sbin/ldconfig:/usr/local/lib/不是符号链接 当我运行 file 命令时,会出现以下内容: 文件/usr/local/lib//usr/local/lib/: 目录 在 /usr/local/lib/ 中,我使用了三个库.我在这里将它们称为 lib1、lib2 和 lib3. 现在,当
..
当我在我的一个库上运行时: nm libmylib.so 我得到这样的一条线 U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 我检查了 nm 的手册页,我得到“U"符号未定义.未定义符号的真正含义是什么? 如果真的是未定义的,那为什么nm会报告呢? 解决方案 未定义符号是库使用但未在创建库的任何目标文件中定义的符号.
..
在解释词法分析器和解析器之后,所有关于如何创建编译器的文本都停止了.他们没有解释如何创建机器代码.我想了解端到端的流程. 目前我的理解是,Windows exe 文件格式被称为 Portable Executable.我阅读了它的标题,但尚未找到可以轻松解释这一点的资源. 我的下一个问题是,我没有看到任何解释机器代码如何存储在文件中的资源.是不是像 .text 段中一个接一个的存储 3
..
我的 gcc 构建工具链生成一个 .map 文件.如何以图形方式显示内存映射? 解决方案 这是 Python 脚本的开始.它将地图文件加载到部分和符号列表(前半部分)中.然后它使用 HTML 渲染地图(或使用 sections 和 symbols 列表做任何你想做的事情). 您可以通过修改这些行来控制脚本: with open('t.map') as f:颜色 = ['9C9F84
..
很多标题都概括了. 如果我想使用库,我不确定两者之间的区别. 谢谢! 解决方案 一般来说,两者都需要. 包含文件包含类型的声明、函数的原型、inline 函数、#defines、...,通常是所有信息关于编译器在编译文件时需要注意的库. 相反,静态库包含库函数的实际目标代码.如果标头包含原型,则静态库包含(编译的)函数的定义,即链接器将与您的链接器链接的对象模块.
..
gold 的人说: -L DIR, --library-path DIR将目录添加到搜索路径--rpath-link 目录将 DIR 添加到链接时间共享库搜索路径 bfd ld 的 man 听起来有点像 -rpath-link 用于递归包含的 sos. ld.lld 甚至没有将其列为参数. 有人可以帮我澄清一下这种情况吗? 解决方案 这里有一个demo,对于GNU ld,
..
当 3 个程序(可执行文件)加载到内存中时,布局可能如下所示: 替代文字 http://img97.imageshack.us/img97/3460/processesm.jpg 我有以下问题: 虚拟内存的概念是否仅限于用户进程?因为,我想知道操作系统内核、驱动程序在哪里?它的内存布局如何?我想了解更多关于内核端内存的信息.我知道它的操作系统特定于你的选择(windows/lin
..
我想深入了解编译器、链接器和加载器的含义和工作原理.参考任何语言,最好是 c++. 解决方案 =====>编译过程 )|五+==================+|||词法分析器|||+-----------------+|||语法分析器 |||+-----------------+|||语义分析|||+-----------------+|||预优化|||+--------------
..
我的构建要求我发出以下命令: $ g++ sniff.cpp -o sniff -lcrafter 但是,在我的 Eclipse 构建中,编译器得到的只是: g++ -o "sniffer_crafter" ./src/sniffer_crafter.o 收到这些命令后,它抱怨我有一个未定义的对库 Crafter 的引用. 如何使用 Eclipse 解决此链接问题?我见过其他人对类似
..
我正在尝试在 Fedora/gcc 上编译/运行我的程序(在 Windows/MSVC 上运行良好).编译现在很好,链接似乎是个问题.根据症状和这篇文章 undefined reference to `__gxx_personality_sj0,在我看来问题可能是编译器/链接器架构类型不匹配.反正我不是专家所以 我刚刚卸载了我使用 yum list | 找到的所有内容egrep gcc|g+
..
我一直认为库必须列在任何依赖于它们的目标文件之后,但鉴于这个简单的程序: #include #include #include #include int main(int argc, char **argv) {双分辨率;res = acos(2);printf("res = %f\n", res);返回0;} 如果我构
..
我有不同的第 3 方库(Windows/Linux/Mac,32/64 位)的预编译版本.它必须包含在项目文件中,以将其他系统上的编译要求保持在最低限度,因为我不能指望它在多年后可供下载.静态和动态版本都可用,但没有来源. 我应该如何在我的 CMakeLists.txt 中链接它,以便依赖的 main.cpp 在所有系统上编译?它可以在不同的 Linux 发行版上运行吗? CMAKE_MI
..
我们正在使用第三方静态库,比如说 A.a 用于 android 开发.我们将其链接为共享库,它在一个 App 中运行良好,但是当使用 B.so 构建另一个 C.so 时,Aa 找不到.我们已经使用 -Wl,--export-dynamic 和 -Wl,--whole-archive 来构建 B.so.我们已经使用nm来检查那些符号,它存在但列为“t"而不是“T",这意味着它是本地符号而不是外部.A
..
我试图弄清楚在生成可执行文件时链接过程是如何工作的.为此,我正在阅读 Ian Taylor 的博客系列,但很多目前它超出了我的范围 - 所以我想看看它在实践中是如何工作的. 目前我生成了一些目标文件并通过 gcc 链接它们: gcc -m32 -o test.o -c test.cgcc -m32 -o main.o -c main.cgcc -m32 -o 测试 main.o test.
..
我有一个不使用现代 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
..
简而言之,我的问题依赖于使用两个不同的编译器编译/构建文件(使用库),同时利用源文件中的 OpenACC 结构. 我有一个具有 OpenACC 结构的 C 源文件.它只有一个简单的函数来计算数组的总和: #include #include #include 双计算总和(int n,双 *a){双倍总和 = 0;诠释我;printf
..
我在链接 boost python 时遇到问题. 我正在使用 Visual Studio 2017 并使用以下命令行编译了 boost 1_64 包: b2 -a toolset=msvc-14.1 --build_type=complete stage variant=debugthreading=multi link=shared runtime-link=shared define=
..