506得票19回答
何时使用动态库和静态库

在C++中创建类库时,您可以选择使用动态库(.dll,.so)或静态库(.lib,.a)。它们之间有什么区别?在何时应该使用哪种库呢?

491得票16回答
静态链接与动态链接

在某些情况下,是否有充分的性能原因选择静态链接或动态链接?我听到或读到了以下内容,但我对此并不了解足够的知识来证明其真实性。 1)通常情况下,静态链接和动态链接之间的运行时性能差异微不足道。 2)如果使用利用档案数据来优化程序热点路径的 profiling 编译器,(1)不成立,因为在静态...

299得票5回答
什么是“静态链接”和“动态链接”?

我经常听到“静态链接”和“动态链接”这两个术语,通常是指使用C、C++或C#编写的代码。它们是什么,究竟在谈论什么,以及它们连接了什么?

197得票5回答
连接器(linkers)是做什么的?

我一直在思考,我知道编译器将您编写的代码转换为二进制文件,但链接器是做什么的呢?它们一直是个谜。大致上我知道“链接”是什么意思。它是将库和框架的引用添加到二进制文件中。但除此之外我就不明白了,对我来说这只是“奏效”。我也了解动态链接的基础知识,但不深入了解。请问有人能解释这些术语吗?

191得票2回答
直接告诉gcc静态链接库的方法

在使用-Wl,-Bstatic告诉gcc要静态链接的库时,我感到有些奇怪。毕竟,我已经直接告诉gcc与库链接的所有其他信息(-Ldir、-llibname)。 是否可以直接告诉gcc驱动程序应该链接哪些库进行静态链接? 澄清:我知道如果某个库仅存在于静态版本中,则会在没有-Wl,-Bsta...

184得票3回答
当动态链接共享库时,全局变量和静态变量会发生什么?

我试图理解当具有全局变量和静态变量的模块与应用程序动态链接时会发生什么。 所谓模块,就是解决方案中的每个项目(我经常使用Visual Studio!)。这些模块可以构建成*.lib或*.dll,也可以构建成*.exe本身。 我了解到应用程序的二进制文件包含所有单独的翻译单元(目标文件)中的...

170得票9回答
执行二进制文件时出现“没有这个文件或目录”的错误

我正在Ubuntu 9.10 x86_64上安装一个二进制Linux应用程序。该应用附带了一个旧版本的gzip(1.2.4),它是为一个更旧的内核编译的:$ file gzip gzip: ELF 32-bit LSB executable, Intel 80386, version 1 (...

162得票4回答
从C语言中调用Go函数

我正在尝试创建一个用Go语言编写的静态对象,以与C程序(例如内核模块或其他)进行接口交互。 我已经找到了有关如何从Go调用C函数的文档,但没有找到太多关于如何反过来的内容。 我发现这是可能的,但比较复杂。 以下是我找到的信息: 关于C和Go之间回调的博客文章 Cgo文档 Golang...

102得票2回答
这里的@plt是什么意思?

0x00000000004004b6 <main+30>: callq 0x400398 <printf@plt> 有人知道吗? 更新 为什么两个disas printf会给我不同的结果?(gdb) disas printf Dump of assembler...

94得票5回答
在macOS上打印可执行文件的rpath

我想使用install_name_tool更改可执行文件的rpath,但我现在无法确定rpath是什么。 install_name_tool要求在命令行上同时提供旧和新的rpath。我可以使用什么命令在macOS下打印可执行文件的rpath?