linker相关内容
我在 windows 目标上使用 Real View 编译器工具 (RVCT 3.2) 创建了一个共享库 (*.so).然后我尝试在 linux 系统上使用 gcc 将此 *.so 文件与我的应用程序链接. 将这个共享库链接到我的应用程序 linux 的 gcc 选项是什么? 我的问题是,是 -shared 选项,用作 gcc -shared myfile.so ...,用于创建
..
有了汇编指令和 C 程序的一些背景知识,我可以想象编译函数的样子,但有趣的是,我从来没有仔细考虑过编译后的 C++ 类的样子. bash$ cat class.cpp#include类基础{诠释我;浮动 f;};bash$ g++ -c 类.cpp 我跑了: bash$objdump -d class.obash$readelf -a 类.o 但我得到的东西我很难理解.
..
[[UPDATE]] -> 如果我 #include "Queue.cpp" 在我的 program.cpp 中,它工作得很好.这应该没有必要吧? 大家好——我正在使用 Visual Studio 2010,但在链接快速而肮脏的队列实现时遇到了问题.我从一个 empty Win32 控制台应用程序开始,所有文件都存在于项目中.对于冗长,这里是复制我的错误的完整代码.我意识到某些代码实际上可能
..
跟进为什么ELF执行入口点虚拟地址是0x80xxxxx而不是0x0形式的0x0? 和 为什么虚拟内存地址为linux 二进制文件从 0x8048000 开始?,为什么我不能让 ld 使用与 ld -e 的默认入口点不同的入口点? 如果这样做,我会得到一个返回代码为 139 的 segmentation fault,即使对于靠近默认入口点的地址也是如此.为什么? 编辑: 我会让问题
..
这是我的错误: dyld:库未加载:/usr/local/lib/libofa.0.dylib引用自:/sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test原因:找不到图片 我做了一些研究并使用 install_name_tool 更改了 dylib 内的路径: davids-macbook:Test david$
..
有一些问题,希望我能找到一些帮助. 我在 Visual Studio 2012 的同一个解决方案下有两个项目 一些背景知识,我创建了一个控制台应用程序,该应用程序输出为 .exe,这是在一个项目中. 在另一个项目中,我设置了 google 测试以在控制台应用程序项目中的类上运行单元测试. 如果我能够将主项目编译为静态库,则不会出现问题,因为可以链接到 .lib,但这不是一个
..
我正在将一些共享对象文件编译成 archive.a: $ g++ -c -Iinclude/-fPIC -O0 -o object1.o source1.cpp$ g++ -c -Iinclude/-fPIC -O0 -o object2.o source2.cpp$ ar rvs archive.a object1.o object2.or - object1.or - object2.o
..
我有一些 C 源文件,我正在使用 gcc.我基本上想编译所有这些并创建一个目标文件.当我尝试时: gcc -c src1.c src2.c src3.c -o final.o 我明白了: gcc: 不能用 -c 指定 -o 或用多个文件指定 -S 如果我尝试: gcc -c src1.c src2.c src3.c 我得到三个不同的目标文件.如何告诉 gcc 编译所有文件以返回一个目标
..
我正在尝试使用其他人的 Makefile 来编译一个非常简单的 c++ 库.生成文件如下: JNIFLAGS=-O2 -pthread -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux全部:rm -f ../dist/libUtils.sog++ $(JNIFLAGS) -c -m32 -o com
..
至少在 Linux 和 Solaris 上,静态库实际上只是一堆已编译的 .o 文件,它们被扔进一个大文件中.编译静态库时,通常会省略 -fpic 标志,因此生成的代码是位置相关的. 现在假设我的静态库是 B.我已经构建了它并得到了生成的 .a 文件,它实际上只是所有位置相关的 .o 文件的一个整体.现在我有一个我想构建的共享库A,我希望它静态链接B.当我构建A时,我自然会使用-fpic标志
..
从 OS X 命令行编译 Swift: swift -sdk $(xcrun --show-sdk-path --sdk macosx) test.swift 从命令行编译 Objective C: clang -lobjc -framework Foundation -c testObject.m 我可以将 -c 选项添加到任一编译器以生成 .o 文件. 如何将这两个源文件链接到一
..
我有一个二进制“CeeloPartyServer";需要在运行时在 FreeBSD 机器上找到 libFoundation.so.它们都在同一个目录中.我使用链接器标志 -rpath=$ORIGIN 编译(在另一个平台上,使用交叉编译器)CeeloPartyServer. >readelf -d CeeloPartyServer |grep -i rpath0x0000000f (RPATH)
..
我有一个应用程序与第三方供应商 VENDOR1 的库 libfoo 的版本 X 静态链接.它还与来自不同第三方供应商 VENDOR2 的动态(共享)库 libbar 链接,该库静态链接来自 VENDOR1 的 libfoo 版本 Y. 所以 libbar.so 包含版本 Y 的 libfoo.a 而我的可执行文件包含版本 X 的 libfoo.alibbar 仅在内部使用 libfoo,并且
..
我使用的是opensuse,当你点击vmware时,mono的网站上的具体变种 我收到此错误.有谁知道我该如何解决它? make[4]: 进入目录`/home/rupert/Desktop/llvm/tools/clang/tools/driver'llvm[4]:链接 Debug+Asserts 可执行文件collect2: ld 以信号 9 [Killed] 终止make[4]: **
..
有什么好的方法可以制作小型的 haskell 可执行文件吗?使用 ghc6,一个简单的 hello world 程序似乎达到了大约 370kB(剥离前为 523kB).C 中的 Hello world 大约为 4kB(剥离前为 9kB). 解决方案 用GHC的开发分支(有谁知道具体是在哪个版本添加的?): $ ghc -o hello hello.hs$ strip -p --strip
..
我在 link 时遇到了 LD_LIBRARY_PATH 问题(这个问题与运行时无关). 我运行make时链接线是这样的(这是一个使用g++ 4.1.x版本的Linux系统): g++ a.o b.o c.o -o myapp \-L/long/path/to/libs/\-L/另一个/长/路径/\-labc -ldef -lghi -l 选项引用由 -L 选项指定的目录中存在的共享库(
..
将程序加载到内存时,加载时动态链接和运行时动态链接有什么区别? 解决方案 加载时链接是指可执行文件(或其他库)引用的库中的符号在可执行文件/库加载到内存时被处理,通过操作系统. 运行时链接是当您使用操作系统提供的 API 或通过库在需要时加载 DLL 或 DSO,然后执行符号解析. 我比 Windows DLL 更了解 Linux DSO,但原理应该是相同的..NET 库可能会
..
如果我理解正确,这意味着 extern void foo(); 函数 foo 是在另一个翻译单元中声明的. 1) 为什么不直接#include 声明该函数的标头? 2) 链接器如何知道在链接时到哪里寻找函数? 编辑:也许我应该澄清一下,上面的声明之后是使用函数 foo(); 在这个翻译单元中从未定义过. 解决方案 1) 可能没有头文件.但是是的,一般来说,对于大型
..
我决定放弃我的 Windows 安装,现在将 Debian 作为我的默认操作系统运行.我一直在 Windows 中进行编码,特别是使用 Visual Studio.我目前正在尝试习惯在 linux 下编译我的代码. 虽然我还有很多文档要阅读,而且不要指望你们让我觉得它太容易了,但如果能得到一些关于从哪里开始的指示仍然会很好.我有一些具体问题,但请随时提出/推荐有关该主题的任何其他内容.
..
glibc 提供 backtrace() 和 backtrace_symbols() 来获取正在运行的程序的堆栈跟踪.但要使其正常工作,必须使用链接器的 -rdynamic 标志构建程序. 传递给 gcc 的 -g 标志与链接器的 -rdynamic 标志有什么区别?对于示例代码,我做了 readelf 来比较输出.-rdynamic 似乎在 Symbol table '.dynsym' 下
..