Tag: 链接器

为什么链接器终止于我? 当我build立CLANG

当您单击vmware时 ,我正在使用opensuse,特定于mono网站上的变体 我得到这个错误。 有谁知道我可以修复它? make[4]: Entering directory `/home/rupert/Desktop/llvm/tools/clang/tools/driver' llvm[4]: Linking Debug+Asserts executable clang collect2: ld terminated with signal 9 [Killed] make[4]: *** [/home/rupert/Desktop/llvm/Debug+Asserts/bin/clang] Error 1 全文可以在这里find

C和汇编实际编译到什么地方?

所以我发现C(++)程序实际上并没有编译成简单的“二进制”(我可能在这里得到了一些错误,在这种情况下,我很抱歉:D),但是对于一系列的东西(符号表,os相关的东西,…)但是… 汇编程序“编译”为纯二进制文件吗? 这意味着除了预定义的string等资源外,没有额外的东 如果C编译成其他的东西而不是纯二进制文件,那么这个小的汇编引导程序如何才能将指令从硬盘拷贝到内存中并执行? 我的意思是,如果操作系统内核(可能用C编写)编译为不同于普通二进制文件的东西 – 引导加载程序如何处理它? 编辑:我知道汇编没有“编译”,因为它只有你的机器的指令集 – 我没有find什么汇编“汇编”的好词。 如果你有一个,留在这里作为评论,我会改变它。

/ usr / local / libsearch共享库吗?

/usr/local/libsearch共享库吗? 我有这个错误: [Leo@chessman ~]$ whereis ffmpeg ffmpeg: /usr/local/bin/ffmpeg [Leo@chessman ~]$ ffmpeg ffmpeg: error while loading shared libraries: libavcore.so.0: cannot open shared object file: No such file or directory [Leo@chessman ~]$ ls /usr/local/lib/libav* /usr/local/lib/libavcodec.a /usr/local/lib/libavfilter.a /usr/local/lib/libavcodec.so /usr/local/lib/libavfilter.so /usr/local/lib/libavcodec.so.52 /usr/local/lib/libavfilter.so.1 /usr/local/lib/libavcodec.so.52.108.0 /usr/local/lib/libavfilter.so.1.74.0 /usr/local/lib/libavcore.a /usr/local/lib/libavformat.a /usr/local/lib/libavcore.so /usr/local/lib/libavformat.so /usr/local/lib/libavcore.so.0 /usr/local/lib/libavformat.so.52 /usr/local/lib/libavcore.so.0.16.1 /usr/local/lib/libavformat.so.52.94.0 /usr/local/lib/libavdevice.a /usr/local/lib/libavutil.a /usr/local/lib/libavdevice.so /usr/local/lib/libavutil.so /usr/local/lib/libavdevice.so.52 /usr/local/lib/libavutil.so.50 /usr/local/lib/libavdevice.so.52.2.3 […]

制作小型的haskell可执行文件?

有没有什么好的方法来制作小型的haskell可执行文件? 用ghc6,一个简单的hello世界程序似乎达到了370kB(523kB之前)。 C中的Hello world约为4kB(带前9kB)。

如何在Mac OSX下使用gcc设置可执行文件的运行时path(-rpath)?

我想在编译时在Mac OSX下设置一个可执行文件(对于连接器)的运行时path,以便在程序启动时由dynamic连接器find非标准位置的共享库。 在Linux下,可以使用-Xlinker -rpath -Xlinker /path/to (或使用-Xlinker -rpath -Xlinker /path/to , -Xlinker -rpath -Xlinker /path/to -Wl,-rpath,/path/to ),在Solaris下,可以将-R/path/to添加到编译器命令行。 我发现一些信息 ,Mac OS X gcc自10.5版以来支持-rpath支持,即从〜2008年。 我试图用一个最小的例子来工作 – 没有成功: $ cat blah.c int blah(int b) { return b+1; } 和: $ cat main.c #include <stdio.h> int blah(int); int main () { printf("%d\n", blah(22)); return 0; } 像这样编译它: $ gcc […]

Xcode自定义构buildconfiguration导致静态库的“库/文件未find”

我有一个工程与一个项目链接在另一个项目(这也是在工作区中)的静态库。 这是Kobold2D中的一个问题,即使我理解了原因,我仍然无法解决,我想这与这个问题很相似 。 项目目标和静态库目标都具有debugging和发布版本configuration。 一切都很好。 现在有人在项目中添加了新的构buildconfiguration,并将其命名为Ad-Hoc 。 现在项目的目标是build立Ad-Hocconfiguration,但是静态库没有这样的configuration。 显然他们默认构buildReleaseconfiguration。 最后,当链接器应该把所有东西放在一起时,它就会失败: ld: library not found for -lbox2d-ios Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang++ failed with exit code 1 对于强制加载的库通过-force_load $(BUILT_PRODUCTS_DIR)/libSomeLib.a错误是类似的,但说“找不到文件”。 我应该注意到库“libbox2d-ios.a”在“链接二进制库”构build阶段列表中。 很明显,问题在于链接器假定这些库在BUILT_PRODUCTS_DIR的Ad-Hoc-iphoneos文件夹中,而它们实际上在Release-iphoneos文件夹中,因为它们没有Ad-Hoc构buildconfiguration。 我怎样才能把连接器打在脸上,告诉他把图书馆放在哪里? 最好我正在寻找一个适用于这两种情况的解决scheme,即库添加了标准方式(链接二进制与库构build阶段)和需要额外的-force_load工作的库。 我希望有一些方法可以: 强制库被放置在应用程序目标的构buildconfiguration文件夹中 运行后编译和预链接脚本,将每个库复制到构buildconfiguration文件夹 指定库的相对path 对于-force_load,使用$ BUILT_PRODUCTS_DIR以外的其他macros 像-WTFmake-all-problems-go-away这样的链接器标志 对不起,我不得不说这个… 唉! 🙂

makefile中的-I和-L有什么区别?

makefile中-I和-L标志的用法是什么?

.exp有什么用处,.lib和.dll有什么区别

在编译和链接期间,.exp有什么用? .lib和.dll有什么区别? 我知道.lib将被使用,而链接和.dll将在运行该程序时使用。 但.lib和.dll究竟有什么区别呢? .lib文件是否不包含来自.dll文件的函数的代码? 有什么需要使用两个单独的文件? 请澄清。 提前致谢

从C ++代码调用Haskell

我目前正在用C ++编写一个应用程序,发现它的一些function会更好的写在Haskell中。 我看过从C代码调用Haskell的说明,但是可以用C ++做同样的事情吗? 编辑:澄清,我正在寻找的是一种方法来编译Haskell代码到外部库,g ++可以链接从C ++的对象代码。 更新:我已经为其他人感兴趣的(下面我不会忘记)举出一个工作的例子。

为什么通用程序通常从0x8000开始?

我对bootloader和系统软件并不陌生,但是我不知道通用程序从0x8000开始的原因。 我已经知道在正常的C / C ++程序中地址0x8000已被用作起始地址。 一般程序的最小引导程序大小是否为0x8000 ? 还是应该分配给引导加载程序32KB的ROM的最小块大小? 还是有另一个原因? 我想从历史上或逻辑上以及从虚拟地址的angular度来了解这一点。 我感谢所有,你的时间和帮助。 为了使问题更清楚,问题与虚拟地址不是物理的相关。 我基本上同意R从物理内存地址的angular度来看待。 没有说具体的系统是多样的,例如linux(即使在android中),一般的RTOS(核心,其他的,特别是ARM链接器部分),它们都使用地址0x8000作为起始地址通用程序。 在这个区域中存在一个名为crt_begin.o,crt.o等位于0x0的加载器。 因此,如果在启动时(boot boot)时,启动加载程序位于BootROM中,则一般程序的启动加载程序的最小容量是32KB。 嗯,但我不确定…