Questions tagged «linker»

链接器是用于从以编译后的编程语言编写的源代码生成可执行文件的工具链的一部分。它在多个文件中获取已编译的目标代码,并从中生成一个单独的“链接”可执行文件。

12
将Python编译为机器代码是否可行?
将Python(可能通过中间C表示形式)编译为机器代码的可行性如何? 大概需要链接到Python运行时库,并且Python标准库中Python本身的任何部分也需要进行编译(并链接)。 另外,如果您想对表达式进行动态求值,则需要捆绑Python解释器,但是也许不允许这样做的Python子集仍然有用。 它会提供任何速度和/或内存使用优势吗?大概可以省去Python解释器的启动时间(尽管共享库在启动时仍需要加载)。
128 python  c  linker  compilation 



1
动态链接共享库时,全局变量和静态变量会发生什么?
我试图了解将具有全局变量和静态变量的模块动态链接到应用程序时会发生什么。所谓模块,是指解决方案中的每个项目(我在Visual Studio中工作很多!)。这些模块内置于* .lib或* .dll或* .exe本身中。 我了解到,应用程序的二进制文件在数据段中包含所有单个转换单元(目标文件)的全局和静态数据(如果为const,则为只读数据段)。 当该应用程序使用带有加载时动态链接的模块A时会发生什么?我假设DLL有一个用于其全局变量和静态变量的部分。操作系统是否加载它们?如果是这样,它们将装载到哪里? 当应用程序使用带有运行时动态链接的模块B时,会发生什么? 如果我的应用程序中有两个同时使用A和B的模块,是否按如下所述创建A和B的全局变量的副本(如果它们是不同的过程)? DLL A和DLL B是否可以访问应用程序全局变量? (请同时说明您的原因) 从MSDN引用: 在DLL源代码文件中声明为全局的变量被编译器和链接器视为全局变量,但是加载给定DLL的每个进程都会获得该DLL全局变量的自己的副本。静态变量的范围仅限于声明静态变量的块。结果,每个进程默认都有自己的DLL全局和静态变量实例。 从这里: 动态链接模块时,不清楚不同的库是否具有自己的全局实例或是否共享全局实例。 谢谢。

4
链接器做什么?
我一直想知道。我知道编译器会将您编写的代码转换为二进制文件,但是链接程序会做什么?他们一直是我的谜。 我大致了解什么是“链接”。这是将对库和框架的引用添加到二进制文件中的时候。除此之外,我什么都不懂。对我来说,它“有效”。我也了解动态链接的基础知识,但没有什么太深的。 有人可以解释一下这些条款吗?

1
-all_load链接器标志有什么作用?
在编译Objective-C代码时,我在任何地方都找不到-all_load标志。 我在将二进制文件上传到Apple时遇到一些问题,他们说这是因为我没有使用此标志,但是即使没有它,我的代码也可以编译。 有人可以帮我吗? 谢谢

8
Visual C ++:如何禁用特定的链接器警告?
我正在使用来自CGAL的库,在我的代码编译的链接阶段,它会产生许多这种形式的链接警告: warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info 如何在Visual C ++ / Studio 2008下关闭此特定链接器警告? 请注意,我对正在使用的外部(CGAL)库没有任何控制。我不能/不想重新编译外部库。因此,需要在我的末端修复消息。


4
如何链接到特定的glibc版本?
当我在Ubuntu Lucid 10.04 PC上编译某些东西时,它会与glibc链接。Lucid使用glibc 2.11。当我在具有旧版glibc的另一台PC上运行此二进制文件时,该命令失败,提示没有glibc 2.11 ... 据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗? 在我的具体用法中,我尝试为ARM编译gcc跨工具链。
110 linux  gcc  linker  glibc  libc 

4
如何使用Visual Studio Express 2005制作完全静态链接的.exe?
我当前首选的C ++环境是免费且功能强大的Microsoft Visual Studio 2005 Express版本。我不时将发布的.exe文件发送给其他人,并获得了令人满意的结果。但是最近我令人不安的发现是,令人愉悦的结果是基于我想要的更多运气。试图在旧的(2001年份,未认真更新)XP机上运行这些程序之一,但给我什么却只有讨厌的“系统无法运行x.exe”(或类似)消息。 一些谷歌搜索发现,使用此工具集,甚至指定静态链接也会导致简单的hello-world.exe实际上依赖于额外的.dll文件(msvcm80.dll等)。一个精心设计的版本计划系统(是否显示任何文件?)然后会在没有完全正确的.dll版本的情况下运行.exe。我不需要或不需要这些东西,我只想要一个老式的自包含.exe,它只执行最低公分母Win32操作,并且可以在任何旧的win32 OS上运行。 有谁知道我现有的工具集是否有可能做我想做的事情? 谢谢。

8
静态链接仅某些库
与GCC链接时,如何仅将某些特定的库静态链接到我的二进制文件? gcc ... -static ...试图静态链接所有链接的库,但是我还没有其中一些的静态版本(例如:libX11)。


6
__gxx_personality_v0的作用是什么?
这是一个来自OS开发站点的二手问题,但是由于我在任何地方都找不到合适的解释,这使我感到好奇。 使用gcc编译和链接独立的C ++程序时,有时会发生如下链接错误: out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' 这显然是因为该符号是在libstdc ++中定义的,而在独立环境中则缺少该符号。解决问题仅需在以下位置定义此符号: void *__gxx_personality_v0; 哪个很好,但是我不喜欢魔术般工作的东西...所以问题是,这个符号的目的是什么?
103 c++  gcc  linker  kernel 

3
链接C ++ 17,C ++ 14和C ++ 11对象是否安全
假设我有三个编译对象,它们都是由同一编译器/版本生成的: A是使用C ++ 11标准编译的 B用C ++ 14标准编译 C用C ++ 17标准编译 为简单起见,我们假设所有标头均使用 C ++ 11编写,仅使用其语义在所有三个标准版本之间均未改变的构造,因此任何相互依赖关系都可以通过标头包含正确表达,并且编译器不反对。 这些对象是哪种组合,链接到单个二进制文件不安全吗?为什么? 编辑:涵盖主要编译器(例如gcc,clang,vs ++)的答案是受欢迎的
97 c++  c++11  linker  c++14  abi 

15
将模板化的C ++类拆分为.hpp / .cpp文件-有可能吗?
我在尝试编译在.hpp和.cpp文件之间分割的C ++模板类时遇到错误: $ g++ -c -o main.o main.cpp $ g++ -c -o stack.o stack.cpp $ g++ -o main main.o stack.o main.o: In function `main': main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()' main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()' collect2: ld returned 1 exit status make: *** [program] Error 1 这是我的代码: stack.hpp: #ifndef _STACK_HPP #define …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.